<!DOCTYPE html>
<html>
<head><meta charset="utf-8" />
<title>16-scipy</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>

<style type="text/css">
    /*!
*
* Twitter Bootstrap
*
*/
/*!
 * Bootstrap v3.3.7 (http://getbootstrap.com)
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
  font-family: sans-serif;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}
body {
  margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block;
}
audio,
canvas,
progress,
video {
  display: inline-block;
  vertical-align: baseline;
}
audio:not([controls]) {
  display: none;
  height: 0;
}
[hidden],
template {
  display: none;
}
a {
  background-color: transparent;
}
a:active,
a:hover {
  outline: 0;
}
abbr[title] {
  border-bottom: 1px dotted;
}
b,
strong {
  font-weight: bold;
}
dfn {
  font-style: italic;
}
h1 {
  font-size: 2em;
  margin: 0.67em 0;
}
mark {
  background: #ff0;
  color: #000;
}
small {
  font-size: 80%;
}
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sup {
  top: -0.5em;
}
sub {
  bottom: -0.25em;
}
img {
  border: 0;
}
svg:not(:root) {
  overflow: hidden;
}
figure {
  margin: 1em 40px;
}
hr {
  box-sizing: content-box;
  height: 0;
}
pre {
  overflow: auto;
}
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
  color: inherit;
  font: inherit;
  margin: 0;
}
button {
  overflow: visible;
}
button,
select {
  text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button;
  cursor: pointer;
}
button[disabled],
html input[disabled] {
  cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}
input {
  line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box;
  padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: textfield;
  box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}
legend {
  border: 0;
  padding: 0;
}
textarea {
  overflow: auto;
}
optgroup {
  font-weight: bold;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}
td,
th {
  padding: 0;
}
/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
@media print {
  *,
  *:before,
  *:after {
    background: transparent !important;
    color: #000 !important;
    box-shadow: none !important;
    text-shadow: none !important;
  }
  a,
  a:visited {
    text-decoration: underline;
  }
  a[href]:after {
    content: " (" attr(href) ")";
  }
  abbr[title]:after {
    content: " (" attr(title) ")";
  }
  a[href^="#"]:after,
  a[href^="javascript:"]:after {
    content: "";
  }
  pre,
  blockquote {
    border: 1px solid #999;
    page-break-inside: avoid;
  }
  thead {
    display: table-header-group;
  }
  tr,
  img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }
  h2,
  h3 {
    page-break-after: avoid;
  }
  .navbar {
    display: none;
  }
  .btn > .caret,
  .dropup > .btn > .caret {
    border-top-color: #000 !important;
  }
  .label {
    border: 1px solid #000;
  }
  .table {
    border-collapse: collapse !important;
  }
  .table td,
  .table th {
    background-color: #fff !important;
  }
  .table-bordered th,
  .table-bordered td {
    border: 1px solid #ddd !important;
  }
}
@font-face {
  font-family: 'Glyphicons Halflings';
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
.glyphicon {
  position: relative;
  top: 1px;
  display: inline-block;
  font-family: 'Glyphicons Halflings';
  font-style: normal;
  font-weight: normal;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.glyphicon-asterisk:before {
  content: "\002a";
}
.glyphicon-plus:before {
  content: "\002b";
}
.glyphicon-euro:before,
.glyphicon-eur:before {
  content: "\20ac";
}
.glyphicon-minus:before {
  content: "\2212";
}
.glyphicon-cloud:before {
  content: "\2601";
}
.glyphicon-envelope:before {
  content: "\2709";
}
.glyphicon-pencil:before {
  content: "\270f";
}
.glyphicon-glass:before {
  content: "\e001";
}
.glyphicon-music:before {
  content: "\e002";
}
.glyphicon-search:before {
  content: "\e003";
}
.glyphicon-heart:before {
  content: "\e005";
}
.glyphicon-star:before {
  content: "\e006";
}
.glyphicon-star-empty:before {
  content: "\e007";
}
.glyphicon-user:before {
  content: "\e008";
}
.glyphicon-film:before {
  content: "\e009";
}
.glyphicon-th-large:before {
  content: "\e010";
}
.glyphicon-th:before {
  content: "\e011";
}
.glyphicon-th-list:before {
  content: "\e012";
}
.glyphicon-ok:before {
  content: "\e013";
}
.glyphicon-remove:before {
  content: "\e014";
}
.glyphicon-zoom-in:before {
  content: "\e015";
}
.glyphicon-zoom-out:before {
  content: "\e016";
}
.glyphicon-off:before {
  content: "\e017";
}
.glyphicon-signal:before {
  content: "\e018";
}
.glyphicon-cog:before {
  content: "\e019";
}
.glyphicon-trash:before {
  content: "\e020";
}
.glyphicon-home:before {
  content: "\e021";
}
.glyphicon-file:before {
  content: "\e022";
}
.glyphicon-time:before {
  content: "\e023";
}
.glyphicon-road:before {
  content: "\e024";
}
.glyphicon-download-alt:before {
  content: "\e025";
}
.glyphicon-download:before {
  content: "\e026";
}
.glyphicon-upload:before {
  content: "\e027";
}
.glyphicon-inbox:before {
  content: "\e028";
}
.glyphicon-play-circle:before {
  content: "\e029";
}
.glyphicon-repeat:before {
  content: "\e030";
}
.glyphicon-refresh:before {
  content: "\e031";
}
.glyphicon-list-alt:before {
  content: "\e032";
}
.glyphicon-lock:before {
  content: "\e033";
}
.glyphicon-flag:before {
  content: "\e034";
}
.glyphicon-headphones:before {
  content: "\e035";
}
.glyphicon-volume-off:before {
  content: "\e036";
}
.glyphicon-volume-down:before {
  content: "\e037";
}
.glyphicon-volume-up:before {
  content: "\e038";
}
.glyphicon-qrcode:before {
  content: "\e039";
}
.glyphicon-barcode:before {
  content: "\e040";
}
.glyphicon-tag:before {
  content: "\e041";
}
.glyphicon-tags:before {
  content: "\e042";
}
.glyphicon-book:before {
  content: "\e043";
}
.glyphicon-bookmark:before {
  content: "\e044";
}
.glyphicon-print:before {
  content: "\e045";
}
.glyphicon-camera:before {
  content: "\e046";
}
.glyphicon-font:before {
  content: "\e047";
}
.glyphicon-bold:before {
  content: "\e048";
}
.glyphicon-italic:before {
  content: "\e049";
}
.glyphicon-text-height:before {
  content: "\e050";
}
.glyphicon-text-width:before {
  content: "\e051";
}
.glyphicon-align-left:before {
  content: "\e052";
}
.glyphicon-align-center:before {
  content: "\e053";
}
.glyphicon-align-right:before {
  content: "\e054";
}
.glyphicon-align-justify:before {
  content: "\e055";
}
.glyphicon-list:before {
  content: "\e056";
}
.glyphicon-indent-left:before {
  content: "\e057";
}
.glyphicon-indent-right:before {
  content: "\e058";
}
.glyphicon-facetime-video:before {
  content: "\e059";
}
.glyphicon-picture:before {
  content: "\e060";
}
.glyphicon-map-marker:before {
  content: "\e062";
}
.glyphicon-adjust:before {
  content: "\e063";
}
.glyphicon-tint:before {
  content: "\e064";
}
.glyphicon-edit:before {
  content: "\e065";
}
.glyphicon-share:before {
  content: "\e066";
}
.glyphicon-check:before {
  content: "\e067";
}
.glyphicon-move:before {
  content: "\e068";
}
.glyphicon-step-backward:before {
  content: "\e069";
}
.glyphicon-fast-backward:before {
  content: "\e070";
}
.glyphicon-backward:before {
  content: "\e071";
}
.glyphicon-play:before {
  content: "\e072";
}
.glyphicon-pause:before {
  content: "\e073";
}
.glyphicon-stop:before {
  content: "\e074";
}
.glyphicon-forward:before {
  content: "\e075";
}
.glyphicon-fast-forward:before {
  content: "\e076";
}
.glyphicon-step-forward:before {
  content: "\e077";
}
.glyphicon-eject:before {
  content: "\e078";
}
.glyphicon-chevron-left:before {
  content: "\e079";
}
.glyphicon-chevron-right:before {
  content: "\e080";
}
.glyphicon-plus-sign:before {
  content: "\e081";
}
.glyphicon-minus-sign:before {
  content: "\e082";
}
.glyphicon-remove-sign:before {
  content: "\e083";
}
.glyphicon-ok-sign:before {
  content: "\e084";
}
.glyphicon-question-sign:before {
  content: "\e085";
}
.glyphicon-info-sign:before {
  content: "\e086";
}
.glyphicon-screenshot:before {
  content: "\e087";
}
.glyphicon-remove-circle:before {
  content: "\e088";
}
.glyphicon-ok-circle:before {
  content: "\e089";
}
.glyphicon-ban-circle:before {
  content: "\e090";
}
.glyphicon-arrow-left:before {
  content: "\e091";
}
.glyphicon-arrow-right:before {
  content: "\e092";
}
.glyphicon-arrow-up:before {
  content: "\e093";
}
.glyphicon-arrow-down:before {
  content: "\e094";
}
.glyphicon-share-alt:before {
  content: "\e095";
}
.glyphicon-resize-full:before {
  content: "\e096";
}
.glyphicon-resize-small:before {
  content: "\e097";
}
.glyphicon-exclamation-sign:before {
  content: "\e101";
}
.glyphicon-gift:before {
  content: "\e102";
}
.glyphicon-leaf:before {
  content: "\e103";
}
.glyphicon-fire:before {
  content: "\e104";
}
.glyphicon-eye-open:before {
  content: "\e105";
}
.glyphicon-eye-close:before {
  content: "\e106";
}
.glyphicon-warning-sign:before {
  content: "\e107";
}
.glyphicon-plane:before {
  content: "\e108";
}
.glyphicon-calendar:before {
  content: "\e109";
}
.glyphicon-random:before {
  content: "\e110";
}
.glyphicon-comment:before {
  content: "\e111";
}
.glyphicon-magnet:before {
  content: "\e112";
}
.glyphicon-chevron-up:before {
  content: "\e113";
}
.glyphicon-chevron-down:before {
  content: "\e114";
}
.glyphicon-retweet:before {
  content: "\e115";
}
.glyphicon-shopping-cart:before {
  content: "\e116";
}
.glyphicon-folder-close:before {
  content: "\e117";
}
.glyphicon-folder-open:before {
  content: "\e118";
}
.glyphicon-resize-vertical:before {
  content: "\e119";
}
.glyphicon-resize-horizontal:before {
  content: "\e120";
}
.glyphicon-hdd:before {
  content: "\e121";
}
.glyphicon-bullhorn:before {
  content: "\e122";
}
.glyphicon-bell:before {
  content: "\e123";
}
.glyphicon-certificate:before {
  content: "\e124";
}
.glyphicon-thumbs-up:before {
  content: "\e125";
}
.glyphicon-thumbs-down:before {
  content: "\e126";
}
.glyphicon-hand-right:before {
  content: "\e127";
}
.glyphicon-hand-left:before {
  content: "\e128";
}
.glyphicon-hand-up:before {
  content: "\e129";
}
.glyphicon-hand-down:before {
  content: "\e130";
}
.glyphicon-circle-arrow-right:before {
  content: "\e131";
}
.glyphicon-circle-arrow-left:before {
  content: "\e132";
}
.glyphicon-circle-arrow-up:before {
  content: "\e133";
}
.glyphicon-circle-arrow-down:before {
  content: "\e134";
}
.glyphicon-globe:before {
  content: "\e135";
}
.glyphicon-wrench:before {
  content: "\e136";
}
.glyphicon-tasks:before {
  content: "\e137";
}
.glyphicon-filter:before {
  content: "\e138";
}
.glyphicon-briefcase:before {
  content: "\e139";
}
.glyphicon-fullscreen:before {
  content: "\e140";
}
.glyphicon-dashboard:before {
  content: "\e141";
}
.glyphicon-paperclip:before {
  content: "\e142";
}
.glyphicon-heart-empty:before {
  content: "\e143";
}
.glyphicon-link:before {
  content: "\e144";
}
.glyphicon-phone:before {
  content: "\e145";
}
.glyphicon-pushpin:before {
  content: "\e146";
}
.glyphicon-usd:before {
  content: "\e148";
}
.glyphicon-gbp:before {
  content: "\e149";
}
.glyphicon-sort:before {
  content: "\e150";
}
.glyphicon-sort-by-alphabet:before {
  content: "\e151";
}
.glyphicon-sort-by-alphabet-alt:before {
  content: "\e152";
}
.glyphicon-sort-by-order:before {
  content: "\e153";
}
.glyphicon-sort-by-order-alt:before {
  content: "\e154";
}
.glyphicon-sort-by-attributes:before {
  content: "\e155";
}
.glyphicon-sort-by-attributes-alt:before {
  content: "\e156";
}
.glyphicon-unchecked:before {
  content: "\e157";
}
.glyphicon-expand:before {
  content: "\e158";
}
.glyphicon-collapse-down:before {
  content: "\e159";
}
.glyphicon-collapse-up:before {
  content: "\e160";
}
.glyphicon-log-in:before {
  content: "\e161";
}
.glyphicon-flash:before {
  content: "\e162";
}
.glyphicon-log-out:before {
  content: "\e163";
}
.glyphicon-new-window:before {
  content: "\e164";
}
.glyphicon-record:before {
  content: "\e165";
}
.glyphicon-save:before {
  content: "\e166";
}
.glyphicon-open:before {
  content: "\e167";
}
.glyphicon-saved:before {
  content: "\e168";
}
.glyphicon-import:before {
  content: "\e169";
}
.glyphicon-export:before {
  content: "\e170";
}
.glyphicon-send:before {
  content: "\e171";
}
.glyphicon-floppy-disk:before {
  content: "\e172";
}
.glyphicon-floppy-saved:before {
  content: "\e173";
}
.glyphicon-floppy-remove:before {
  content: "\e174";
}
.glyphicon-floppy-save:before {
  content: "\e175";
}
.glyphicon-floppy-open:before {
  content: "\e176";
}
.glyphicon-credit-card:before {
  content: "\e177";
}
.glyphicon-transfer:before {
  content: "\e178";
}
.glyphicon-cutlery:before {
  content: "\e179";
}
.glyphicon-header:before {
  content: "\e180";
}
.glyphicon-compressed:before {
  content: "\e181";
}
.glyphicon-earphone:before {
  content: "\e182";
}
.glyphicon-phone-alt:before {
  content: "\e183";
}
.glyphicon-tower:before {
  content: "\e184";
}
.glyphicon-stats:before {
  content: "\e185";
}
.glyphicon-sd-video:before {
  content: "\e186";
}
.glyphicon-hd-video:before {
  content: "\e187";
}
.glyphicon-subtitles:before {
  content: "\e188";
}
.glyphicon-sound-stereo:before {
  content: "\e189";
}
.glyphicon-sound-dolby:before {
  content: "\e190";
}
.glyphicon-sound-5-1:before {
  content: "\e191";
}
.glyphicon-sound-6-1:before {
  content: "\e192";
}
.glyphicon-sound-7-1:before {
  content: "\e193";
}
.glyphicon-copyright-mark:before {
  content: "\e194";
}
.glyphicon-registration-mark:before {
  content: "\e195";
}
.glyphicon-cloud-download:before {
  content: "\e197";
}
.glyphicon-cloud-upload:before {
  content: "\e198";
}
.glyphicon-tree-conifer:before {
  content: "\e199";
}
.glyphicon-tree-deciduous:before {
  content: "\e200";
}
.glyphicon-cd:before {
  content: "\e201";
}
.glyphicon-save-file:before {
  content: "\e202";
}
.glyphicon-open-file:before {
  content: "\e203";
}
.glyphicon-level-up:before {
  content: "\e204";
}
.glyphicon-copy:before {
  content: "\e205";
}
.glyphicon-paste:before {
  content: "\e206";
}
.glyphicon-alert:before {
  content: "\e209";
}
.glyphicon-equalizer:before {
  content: "\e210";
}
.glyphicon-king:before {
  content: "\e211";
}
.glyphicon-queen:before {
  content: "\e212";
}
.glyphicon-pawn:before {
  content: "\e213";
}
.glyphicon-bishop:before {
  content: "\e214";
}
.glyphicon-knight:before {
  content: "\e215";
}
.glyphicon-baby-formula:before {
  content: "\e216";
}
.glyphicon-tent:before {
  content: "\26fa";
}
.glyphicon-blackboard:before {
  content: "\e218";
}
.glyphicon-bed:before {
  content: "\e219";
}
.glyphicon-apple:before {
  content: "\f8ff";
}
.glyphicon-erase:before {
  content: "\e221";
}
.glyphicon-hourglass:before {
  content: "\231b";
}
.glyphicon-lamp:before {
  content: "\e223";
}
.glyphicon-duplicate:before {
  content: "\e224";
}
.glyphicon-piggy-bank:before {
  content: "\e225";
}
.glyphicon-scissors:before {
  content: "\e226";
}
.glyphicon-bitcoin:before {
  content: "\e227";
}
.glyphicon-btc:before {
  content: "\e227";
}
.glyphicon-xbt:before {
  content: "\e227";
}
.glyphicon-yen:before {
  content: "\00a5";
}
.glyphicon-jpy:before {
  content: "\00a5";
}
.glyphicon-ruble:before {
  content: "\20bd";
}
.glyphicon-rub:before {
  content: "\20bd";
}
.glyphicon-scale:before {
  content: "\e230";
}
.glyphicon-ice-lolly:before {
  content: "\e231";
}
.glyphicon-ice-lolly-tasted:before {
  content: "\e232";
}
.glyphicon-education:before {
  content: "\e233";
}
.glyphicon-option-horizontal:before {
  content: "\e234";
}
.glyphicon-option-vertical:before {
  content: "\e235";
}
.glyphicon-menu-hamburger:before {
  content: "\e236";
}
.glyphicon-modal-window:before {
  content: "\e237";
}
.glyphicon-oil:before {
  content: "\e238";
}
.glyphicon-grain:before {
  content: "\e239";
}
.glyphicon-sunglasses:before {
  content: "\e240";
}
.glyphicon-text-size:before {
  content: "\e241";
}
.glyphicon-text-color:before {
  content: "\e242";
}
.glyphicon-text-background:before {
  content: "\e243";
}
.glyphicon-object-align-top:before {
  content: "\e244";
}
.glyphicon-object-align-bottom:before {
  content: "\e245";
}
.glyphicon-object-align-horizontal:before {
  content: "\e246";
}
.glyphicon-object-align-left:before {
  content: "\e247";
}
.glyphicon-object-align-vertical:before {
  content: "\e248";
}
.glyphicon-object-align-right:before {
  content: "\e249";
}
.glyphicon-triangle-right:before {
  content: "\e250";
}
.glyphicon-triangle-left:before {
  content: "\e251";
}
.glyphicon-triangle-bottom:before {
  content: "\e252";
}
.glyphicon-triangle-top:before {
  content: "\e253";
}
.glyphicon-console:before {
  content: "\e254";
}
.glyphicon-superscript:before {
  content: "\e255";
}
.glyphicon-subscript:before {
  content: "\e256";
}
.glyphicon-menu-left:before {
  content: "\e257";
}
.glyphicon-menu-right:before {
  content: "\e258";
}
.glyphicon-menu-down:before {
  content: "\e259";
}
.glyphicon-menu-up:before {
  content: "\e260";
}
* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
*:before,
*:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
html {
  font-size: 10px;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 13px;
  line-height: 1.42857143;
  color: #000;
  background-color: #fff;
}
input,
button,
select,
textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}
a {
  color: #337ab7;
  text-decoration: none;
}
a:hover,
a:focus {
  color: #23527c;
  text-decoration: underline;
}
a:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
figure {
  margin: 0;
}
img {
  vertical-align: middle;
}
.img-responsive,
.thumbnail > img,
.thumbnail a > img,
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  display: block;
  max-width: 100%;
  height: auto;
}
.img-rounded {
  border-radius: 3px;
}
.img-thumbnail {
  padding: 4px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: all 0.2s ease-in-out;
  -o-transition: all 0.2s ease-in-out;
  transition: all 0.2s ease-in-out;
  display: inline-block;
  max-width: 100%;
  height: auto;
}
.img-circle {
  border-radius: 50%;
}
hr {
  margin-top: 18px;
  margin-bottom: 18px;
  border: 0;
  border-top: 1px solid #eeeeee;
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
}
[role="button"] {
  cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
  font-family: inherit;
  font-weight: 500;
  line-height: 1.1;
  color: inherit;
}
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.h1 small,
.h2 small,
.h3 small,
.h4 small,
.h5 small,
.h6 small,
h1 .small,
h2 .small,
h3 .small,
h4 .small,
h5 .small,
h6 .small,
.h1 .small,
.h2 .small,
.h3 .small,
.h4 .small,
.h5 .small,
.h6 .small {
  font-weight: normal;
  line-height: 1;
  color: #777777;
}
h1,
.h1,
h2,
.h2,
h3,
.h3 {
  margin-top: 18px;
  margin-bottom: 9px;
}
h1 small,
.h1 small,
h2 small,
.h2 small,
h3 small,
.h3 small,
h1 .small,
.h1 .small,
h2 .small,
.h2 .small,
h3 .small,
.h3 .small {
  font-size: 65%;
}
h4,
.h4,
h5,
.h5,
h6,
.h6 {
  margin-top: 9px;
  margin-bottom: 9px;
}
h4 small,
.h4 small,
h5 small,
.h5 small,
h6 small,
.h6 small,
h4 .small,
.h4 .small,
h5 .small,
.h5 .small,
h6 .small,
.h6 .small {
  font-size: 75%;
}
h1,
.h1 {
  font-size: 33px;
}
h2,
.h2 {
  font-size: 27px;
}
h3,
.h3 {
  font-size: 23px;
}
h4,
.h4 {
  font-size: 17px;
}
h5,
.h5 {
  font-size: 13px;
}
h6,
.h6 {
  font-size: 12px;
}
p {
  margin: 0 0 9px;
}
.lead {
  margin-bottom: 18px;
  font-size: 14px;
  font-weight: 300;
  line-height: 1.4;
}
@media (min-width: 768px) {
  .lead {
    font-size: 19.5px;
  }
}
small,
.small {
  font-size: 92%;
}
mark,
.mark {
  background-color: #fcf8e3;
  padding: .2em;
}
.text-left {
  text-align: left;
}
.text-right {
  text-align: right;
}
.text-center {
  text-align: center;
}
.text-justify {
  text-align: justify;
}
.text-nowrap {
  white-space: nowrap;
}
.text-lowercase {
  text-transform: lowercase;
}
.text-uppercase {
  text-transform: uppercase;
}
.text-capitalize {
  text-transform: capitalize;
}
.text-muted {
  color: #777777;
}
.text-primary {
  color: #337ab7;
}
a.text-primary:hover,
a.text-primary:focus {
  color: #286090;
}
.text-success {
  color: #3c763d;
}
a.text-success:hover,
a.text-success:focus {
  color: #2b542c;
}
.text-info {
  color: #31708f;
}
a.text-info:hover,
a.text-info:focus {
  color: #245269;
}
.text-warning {
  color: #8a6d3b;
}
a.text-warning:hover,
a.text-warning:focus {
  color: #66512c;
}
.text-danger {
  color: #a94442;
}
a.text-danger:hover,
a.text-danger:focus {
  color: #843534;
}
.bg-primary {
  color: #fff;
  background-color: #337ab7;
}
a.bg-primary:hover,
a.bg-primary:focus {
  background-color: #286090;
}
.bg-success {
  background-color: #dff0d8;
}
a.bg-success:hover,
a.bg-success:focus {
  background-color: #c1e2b3;
}
.bg-info {
  background-color: #d9edf7;
}
a.bg-info:hover,
a.bg-info:focus {
  background-color: #afd9ee;
}
.bg-warning {
  background-color: #fcf8e3;
}
a.bg-warning:hover,
a.bg-warning:focus {
  background-color: #f7ecb5;
}
.bg-danger {
  background-color: #f2dede;
}
a.bg-danger:hover,
a.bg-danger:focus {
  background-color: #e4b9b9;
}
.page-header {
  padding-bottom: 8px;
  margin: 36px 0 18px;
  border-bottom: 1px solid #eeeeee;
}
ul,
ol {
  margin-top: 0;
  margin-bottom: 9px;
}
ul ul,
ol ul,
ul ol,
ol ol {
  margin-bottom: 0;
}
.list-unstyled {
  padding-left: 0;
  list-style: none;
}
.list-inline {
  padding-left: 0;
  list-style: none;
  margin-left: -5px;
}
.list-inline > li {
  display: inline-block;
  padding-left: 5px;
  padding-right: 5px;
}
dl {
  margin-top: 0;
  margin-bottom: 18px;
}
dt,
dd {
  line-height: 1.42857143;
}
dt {
  font-weight: bold;
}
dd {
  margin-left: 0;
}
@media (min-width: 541px) {
  .dl-horizontal dt {
    float: left;
    width: 160px;
    clear: left;
    text-align: right;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .dl-horizontal dd {
    margin-left: 180px;
  }
}
abbr[title],
abbr[data-original-title] {
  cursor: help;
  border-bottom: 1px dotted #777777;
}
.initialism {
  font-size: 90%;
  text-transform: uppercase;
}
blockquote {
  padding: 9px 18px;
  margin: 0 0 18px;
  font-size: inherit;
  border-left: 5px solid #eeeeee;
}
blockquote p:last-child,
blockquote ul:last-child,
blockquote ol:last-child {
  margin-bottom: 0;
}
blockquote footer,
blockquote small,
blockquote .small {
  display: block;
  font-size: 80%;
  line-height: 1.42857143;
  color: #777777;
}
blockquote footer:before,
blockquote small:before,
blockquote .small:before {
  content: '\2014 \00A0';
}
.blockquote-reverse,
blockquote.pull-right {
  padding-right: 15px;
  padding-left: 0;
  border-right: 5px solid #eeeeee;
  border-left: 0;
  text-align: right;
}
.blockquote-reverse footer:before,
blockquote.pull-right footer:before,
.blockquote-reverse small:before,
blockquote.pull-right small:before,
.blockquote-reverse .small:before,
blockquote.pull-right .small:before {
  content: '';
}
.blockquote-reverse footer:after,
blockquote.pull-right footer:after,
.blockquote-reverse small:after,
blockquote.pull-right small:after,
.blockquote-reverse .small:after,
blockquote.pull-right .small:after {
  content: '\00A0 \2014';
}
address {
  margin-bottom: 18px;
  font-style: normal;
  line-height: 1.42857143;
}
code,
kbd,
pre,
samp {
  font-family: monospace;
}
code {
  padding: 2px 4px;
  font-size: 90%;
  color: #c7254e;
  background-color: #f9f2f4;
  border-radius: 2px;
}
kbd {
  padding: 2px 4px;
  font-size: 90%;
  color: #888;
  background-color: transparent;
  border-radius: 1px;
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
}
kbd kbd {
  padding: 0;
  font-size: 100%;
  font-weight: bold;
  box-shadow: none;
}
pre {
  display: block;
  padding: 8.5px;
  margin: 0 0 9px;
  font-size: 12px;
  line-height: 1.42857143;
  word-break: break-all;
  word-wrap: break-word;
  color: #333333;
  background-color: #f5f5f5;
  border: 1px solid #ccc;
  border-radius: 2px;
}
pre code {
  padding: 0;
  font-size: inherit;
  color: inherit;
  white-space: pre-wrap;
  background-color: transparent;
  border-radius: 0;
}
.pre-scrollable {
  max-height: 340px;
  overflow-y: scroll;
}
.container {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
@media (min-width: 768px) {
  .container {
    width: 768px;
  }
}
@media (min-width: 992px) {
  .container {
    width: 940px;
  }
}
@media (min-width: 1200px) {
  .container {
    width: 1140px;
  }
}
.container-fluid {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
.row {
  margin-left: 0px;
  margin-right: 0px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
  position: relative;
  min-height: 1px;
  padding-left: 0px;
  padding-right: 0px;
}
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
  float: left;
}
.col-xs-12 {
  width: 100%;
}
.col-xs-11 {
  width: 91.66666667%;
}
.col-xs-10 {
  width: 83.33333333%;
}
.col-xs-9 {
  width: 75%;
}
.col-xs-8 {
  width: 66.66666667%;
}
.col-xs-7 {
  width: 58.33333333%;
}
.col-xs-6 {
  width: 50%;
}
.col-xs-5 {
  width: 41.66666667%;
}
.col-xs-4 {
  width: 33.33333333%;
}
.col-xs-3 {
  width: 25%;
}
.col-xs-2 {
  width: 16.66666667%;
}
.col-xs-1 {
  width: 8.33333333%;
}
.col-xs-pull-12 {
  right: 100%;
}
.col-xs-pull-11 {
  right: 91.66666667%;
}
.col-xs-pull-10 {
  right: 83.33333333%;
}
.col-xs-pull-9 {
  right: 75%;
}
.col-xs-pull-8 {
  right: 66.66666667%;
}
.col-xs-pull-7 {
  right: 58.33333333%;
}
.col-xs-pull-6 {
  right: 50%;
}
.col-xs-pull-5 {
  right: 41.66666667%;
}
.col-xs-pull-4 {
  right: 33.33333333%;
}
.col-xs-pull-3 {
  right: 25%;
}
.col-xs-pull-2 {
  right: 16.66666667%;
}
.col-xs-pull-1 {
  right: 8.33333333%;
}
.col-xs-pull-0 {
  right: auto;
}
.col-xs-push-12 {
  left: 100%;
}
.col-xs-push-11 {
  left: 91.66666667%;
}
.col-xs-push-10 {
  left: 83.33333333%;
}
.col-xs-push-9 {
  left: 75%;
}
.col-xs-push-8 {
  left: 66.66666667%;
}
.col-xs-push-7 {
  left: 58.33333333%;
}
.col-xs-push-6 {
  left: 50%;
}
.col-xs-push-5 {
  left: 41.66666667%;
}
.col-xs-push-4 {
  left: 33.33333333%;
}
.col-xs-push-3 {
  left: 25%;
}
.col-xs-push-2 {
  left: 16.66666667%;
}
.col-xs-push-1 {
  left: 8.33333333%;
}
.col-xs-push-0 {
  left: auto;
}
.col-xs-offset-12 {
  margin-left: 100%;
}
.col-xs-offset-11 {
  margin-left: 91.66666667%;
}
.col-xs-offset-10 {
  margin-left: 83.33333333%;
}
.col-xs-offset-9 {
  margin-left: 75%;
}
.col-xs-offset-8 {
  margin-left: 66.66666667%;
}
.col-xs-offset-7 {
  margin-left: 58.33333333%;
}
.col-xs-offset-6 {
  margin-left: 50%;
}
.col-xs-offset-5 {
  margin-left: 41.66666667%;
}
.col-xs-offset-4 {
  margin-left: 33.33333333%;
}
.col-xs-offset-3 {
  margin-left: 25%;
}
.col-xs-offset-2 {
  margin-left: 16.66666667%;
}
.col-xs-offset-1 {
  margin-left: 8.33333333%;
}
.col-xs-offset-0 {
  margin-left: 0%;
}
@media (min-width: 768px) {
  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
    float: left;
  }
  .col-sm-12 {
    width: 100%;
  }
  .col-sm-11 {
    width: 91.66666667%;
  }
  .col-sm-10 {
    width: 83.33333333%;
  }
  .col-sm-9 {
    width: 75%;
  }
  .col-sm-8 {
    width: 66.66666667%;
  }
  .col-sm-7 {
    width: 58.33333333%;
  }
  .col-sm-6 {
    width: 50%;
  }
  .col-sm-5 {
    width: 41.66666667%;
  }
  .col-sm-4 {
    width: 33.33333333%;
  }
  .col-sm-3 {
    width: 25%;
  }
  .col-sm-2 {
    width: 16.66666667%;
  }
  .col-sm-1 {
    width: 8.33333333%;
  }
  .col-sm-pull-12 {
    right: 100%;
  }
  .col-sm-pull-11 {
    right: 91.66666667%;
  }
  .col-sm-pull-10 {
    right: 83.33333333%;
  }
  .col-sm-pull-9 {
    right: 75%;
  }
  .col-sm-pull-8 {
    right: 66.66666667%;
  }
  .col-sm-pull-7 {
    right: 58.33333333%;
  }
  .col-sm-pull-6 {
    right: 50%;
  }
  .col-sm-pull-5 {
    right: 41.66666667%;
  }
  .col-sm-pull-4 {
    right: 33.33333333%;
  }
  .col-sm-pull-3 {
    right: 25%;
  }
  .col-sm-pull-2 {
    right: 16.66666667%;
  }
  .col-sm-pull-1 {
    right: 8.33333333%;
  }
  .col-sm-pull-0 {
    right: auto;
  }
  .col-sm-push-12 {
    left: 100%;
  }
  .col-sm-push-11 {
    left: 91.66666667%;
  }
  .col-sm-push-10 {
    left: 83.33333333%;
  }
  .col-sm-push-9 {
    left: 75%;
  }
  .col-sm-push-8 {
    left: 66.66666667%;
  }
  .col-sm-push-7 {
    left: 58.33333333%;
  }
  .col-sm-push-6 {
    left: 50%;
  }
  .col-sm-push-5 {
    left: 41.66666667%;
  }
  .col-sm-push-4 {
    left: 33.33333333%;
  }
  .col-sm-push-3 {
    left: 25%;
  }
  .col-sm-push-2 {
    left: 16.66666667%;
  }
  .col-sm-push-1 {
    left: 8.33333333%;
  }
  .col-sm-push-0 {
    left: auto;
  }
  .col-sm-offset-12 {
    margin-left: 100%;
  }
  .col-sm-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-sm-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-sm-offset-9 {
    margin-left: 75%;
  }
  .col-sm-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-sm-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-sm-offset-6 {
    margin-left: 50%;
  }
  .col-sm-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-sm-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-sm-offset-3 {
    margin-left: 25%;
  }
  .col-sm-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-sm-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-sm-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 992px) {
  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
    float: left;
  }
  .col-md-12 {
    width: 100%;
  }
  .col-md-11 {
    width: 91.66666667%;
  }
  .col-md-10 {
    width: 83.33333333%;
  }
  .col-md-9 {
    width: 75%;
  }
  .col-md-8 {
    width: 66.66666667%;
  }
  .col-md-7 {
    width: 58.33333333%;
  }
  .col-md-6 {
    width: 50%;
  }
  .col-md-5 {
    width: 41.66666667%;
  }
  .col-md-4 {
    width: 33.33333333%;
  }
  .col-md-3 {
    width: 25%;
  }
  .col-md-2 {
    width: 16.66666667%;
  }
  .col-md-1 {
    width: 8.33333333%;
  }
  .col-md-pull-12 {
    right: 100%;
  }
  .col-md-pull-11 {
    right: 91.66666667%;
  }
  .col-md-pull-10 {
    right: 83.33333333%;
  }
  .col-md-pull-9 {
    right: 75%;
  }
  .col-md-pull-8 {
    right: 66.66666667%;
  }
  .col-md-pull-7 {
    right: 58.33333333%;
  }
  .col-md-pull-6 {
    right: 50%;
  }
  .col-md-pull-5 {
    right: 41.66666667%;
  }
  .col-md-pull-4 {
    right: 33.33333333%;
  }
  .col-md-pull-3 {
    right: 25%;
  }
  .col-md-pull-2 {
    right: 16.66666667%;
  }
  .col-md-pull-1 {
    right: 8.33333333%;
  }
  .col-md-pull-0 {
    right: auto;
  }
  .col-md-push-12 {
    left: 100%;
  }
  .col-md-push-11 {
    left: 91.66666667%;
  }
  .col-md-push-10 {
    left: 83.33333333%;
  }
  .col-md-push-9 {
    left: 75%;
  }
  .col-md-push-8 {
    left: 66.66666667%;
  }
  .col-md-push-7 {
    left: 58.33333333%;
  }
  .col-md-push-6 {
    left: 50%;
  }
  .col-md-push-5 {
    left: 41.66666667%;
  }
  .col-md-push-4 {
    left: 33.33333333%;
  }
  .col-md-push-3 {
    left: 25%;
  }
  .col-md-push-2 {
    left: 16.66666667%;
  }
  .col-md-push-1 {
    left: 8.33333333%;
  }
  .col-md-push-0 {
    left: auto;
  }
  .col-md-offset-12 {
    margin-left: 100%;
  }
  .col-md-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-md-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-md-offset-9 {
    margin-left: 75%;
  }
  .col-md-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-md-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-md-offset-6 {
    margin-left: 50%;
  }
  .col-md-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-md-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-md-offset-3 {
    margin-left: 25%;
  }
  .col-md-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-md-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-md-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 1200px) {
  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
    float: left;
  }
  .col-lg-12 {
    width: 100%;
  }
  .col-lg-11 {
    width: 91.66666667%;
  }
  .col-lg-10 {
    width: 83.33333333%;
  }
  .col-lg-9 {
    width: 75%;
  }
  .col-lg-8 {
    width: 66.66666667%;
  }
  .col-lg-7 {
    width: 58.33333333%;
  }
  .col-lg-6 {
    width: 50%;
  }
  .col-lg-5 {
    width: 41.66666667%;
  }
  .col-lg-4 {
    width: 33.33333333%;
  }
  .col-lg-3 {
    width: 25%;
  }
  .col-lg-2 {
    width: 16.66666667%;
  }
  .col-lg-1 {
    width: 8.33333333%;
  }
  .col-lg-pull-12 {
    right: 100%;
  }
  .col-lg-pull-11 {
    right: 91.66666667%;
  }
  .col-lg-pull-10 {
    right: 83.33333333%;
  }
  .col-lg-pull-9 {
    right: 75%;
  }
  .col-lg-pull-8 {
    right: 66.66666667%;
  }
  .col-lg-pull-7 {
    right: 58.33333333%;
  }
  .col-lg-pull-6 {
    right: 50%;
  }
  .col-lg-pull-5 {
    right: 41.66666667%;
  }
  .col-lg-pull-4 {
    right: 33.33333333%;
  }
  .col-lg-pull-3 {
    right: 25%;
  }
  .col-lg-pull-2 {
    right: 16.66666667%;
  }
  .col-lg-pull-1 {
    right: 8.33333333%;
  }
  .col-lg-pull-0 {
    right: auto;
  }
  .col-lg-push-12 {
    left: 100%;
  }
  .col-lg-push-11 {
    left: 91.66666667%;
  }
  .col-lg-push-10 {
    left: 83.33333333%;
  }
  .col-lg-push-9 {
    left: 75%;
  }
  .col-lg-push-8 {
    left: 66.66666667%;
  }
  .col-lg-push-7 {
    left: 58.33333333%;
  }
  .col-lg-push-6 {
    left: 50%;
  }
  .col-lg-push-5 {
    left: 41.66666667%;
  }
  .col-lg-push-4 {
    left: 33.33333333%;
  }
  .col-lg-push-3 {
    left: 25%;
  }
  .col-lg-push-2 {
    left: 16.66666667%;
  }
  .col-lg-push-1 {
    left: 8.33333333%;
  }
  .col-lg-push-0 {
    left: auto;
  }
  .col-lg-offset-12 {
    margin-left: 100%;
  }
  .col-lg-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-lg-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-lg-offset-9 {
    margin-left: 75%;
  }
  .col-lg-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-lg-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-lg-offset-6 {
    margin-left: 50%;
  }
  .col-lg-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-lg-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-lg-offset-3 {
    margin-left: 25%;
  }
  .col-lg-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-lg-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-lg-offset-0 {
    margin-left: 0%;
  }
}
table {
  background-color: transparent;
}
caption {
  padding-top: 8px;
  padding-bottom: 8px;
  color: #777777;
  text-align: left;
}
th {
  text-align: left;
}
.table {
  width: 100%;
  max-width: 100%;
  margin-bottom: 18px;
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
  padding: 8px;
  line-height: 1.42857143;
  vertical-align: top;
  border-top: 1px solid #ddd;
}
.table > thead > tr > th {
  vertical-align: bottom;
  border-bottom: 2px solid #ddd;
}
.table > caption + thead > tr:first-child > th,
.table > colgroup + thead > tr:first-child > th,
.table > thead:first-child > tr:first-child > th,
.table > caption + thead > tr:first-child > td,
.table > colgroup + thead > tr:first-child > td,
.table > thead:first-child > tr:first-child > td {
  border-top: 0;
}
.table > tbody + tbody {
  border-top: 2px solid #ddd;
}
.table .table {
  background-color: #fff;
}
.table-condensed > thead > tr > th,
.table-condensed > tbody > tr > th,
.table-condensed > tfoot > tr > th,
.table-condensed > thead > tr > td,
.table-condensed > tbody > tr > td,
.table-condensed > tfoot > tr > td {
  padding: 5px;
}
.table-bordered {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td {
  border-bottom-width: 2px;
}
.table-striped > tbody > tr:nth-of-type(odd) {
  background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover {
  background-color: #f5f5f5;
}
table col[class*="col-"] {
  position: static;
  float: none;
  display: table-column;
}
table td[class*="col-"],
table th[class*="col-"] {
  position: static;
  float: none;
  display: table-cell;
}
.table > thead > tr > td.active,
.table > tbody > tr > td.active,
.table > tfoot > tr > td.active,
.table > thead > tr > th.active,
.table > tbody > tr > th.active,
.table > tfoot > tr > th.active,
.table > thead > tr.active > td,
.table > tbody > tr.active > td,
.table > tfoot > tr.active > td,
.table > thead > tr.active > th,
.table > tbody > tr.active > th,
.table > tfoot > tr.active > th {
  background-color: #f5f5f5;
}
.table-hover > tbody > tr > td.active:hover,
.table-hover > tbody > tr > th.active:hover,
.table-hover > tbody > tr.active:hover > td,
.table-hover > tbody > tr:hover > .active,
.table-hover > tbody > tr.active:hover > th {
  background-color: #e8e8e8;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
  background-color: #dff0d8;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
  background-color: #d0e9c6;
}
.table > thead > tr > td.info,
.table > tbody > tr > td.info,
.table > tfoot > tr > td.info,
.table > thead > tr > th.info,
.table > tbody > tr > th.info,
.table > tfoot > tr > th.info,
.table > thead > tr.info > td,
.table > tbody > tr.info > td,
.table > tfoot > tr.info > td,
.table > thead > tr.info > th,
.table > tbody > tr.info > th,
.table > tfoot > tr.info > th {
  background-color: #d9edf7;
}
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover,
.table-hover > tbody > tr.info:hover > td,
.table-hover > tbody > tr:hover > .info,
.table-hover > tbody > tr.info:hover > th {
  background-color: #c4e3f3;
}
.table > thead > tr > td.warning,
.table > tbody > tr > td.warning,
.table > tfoot > tr > td.warning,
.table > thead > tr > th.warning,
.table > tbody > tr > th.warning,
.table > tfoot > tr > th.warning,
.table > thead > tr.warning > td,
.table > tbody > tr.warning > td,
.table > tfoot > tr.warning > td,
.table > thead > tr.warning > th,
.table > tbody > tr.warning > th,
.table > tfoot > tr.warning > th {
  background-color: #fcf8e3;
}
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover,
.table-hover > tbody > tr.warning:hover > td,
.table-hover > tbody > tr:hover > .warning,
.table-hover > tbody > tr.warning:hover > th {
  background-color: #faf2cc;
}
.table > thead > tr > td.danger,
.table > tbody > tr > td.danger,
.table > tfoot > tr > td.danger,
.table > thead > tr > th.danger,
.table > tbody > tr > th.danger,
.table > tfoot > tr > th.danger,
.table > thead > tr.danger > td,
.table > tbody > tr.danger > td,
.table > tfoot > tr.danger > td,
.table > thead > tr.danger > th,
.table > tbody > tr.danger > th,
.table > tfoot > tr.danger > th {
  background-color: #f2dede;
}
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover,
.table-hover > tbody > tr.danger:hover > td,
.table-hover > tbody > tr:hover > .danger,
.table-hover > tbody > tr.danger:hover > th {
  background-color: #ebcccc;
}
.table-responsive {
  overflow-x: auto;
  min-height: 0.01%;
}
@media screen and (max-width: 767px) {
  .table-responsive {
    width: 100%;
    margin-bottom: 13.5px;
    overflow-y: hidden;
    -ms-overflow-style: -ms-autohiding-scrollbar;
    border: 1px solid #ddd;
  }
  .table-responsive > .table {
    margin-bottom: 0;
  }
  .table-responsive > .table > thead > tr > th,
  .table-responsive > .table > tbody > tr > th,
  .table-responsive > .table > tfoot > tr > th,
  .table-responsive > .table > thead > tr > td,
  .table-responsive > .table > tbody > tr > td,
  .table-responsive > .table > tfoot > tr > td {
    white-space: nowrap;
  }
  .table-responsive > .table-bordered {
    border: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:first-child,
  .table-responsive > .table-bordered > tbody > tr > th:first-child,
  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
  .table-responsive > .table-bordered > thead > tr > td:first-child,
  .table-responsive > .table-bordered > tbody > tr > td:first-child,
  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
    border-left: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:last-child,
  .table-responsive > .table-bordered > tbody > tr > th:last-child,
  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
  .table-responsive > .table-bordered > thead > tr > td:last-child,
  .table-responsive > .table-bordered > tbody > tr > td:last-child,
  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
    border-right: 0;
  }
  .table-responsive > .table-bordered > tbody > tr:last-child > th,
  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
  .table-responsive > .table-bordered > tbody > tr:last-child > td,
  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
    border-bottom: 0;
  }
}
fieldset {
  padding: 0;
  margin: 0;
  border: 0;
  min-width: 0;
}
legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 18px;
  font-size: 19.5px;
  line-height: inherit;
  color: #333333;
  border: 0;
  border-bottom: 1px solid #e5e5e5;
}
label {
  display: inline-block;
  max-width: 100%;
  margin-bottom: 5px;
  font-weight: bold;
}
input[type="search"] {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
input[type="radio"],
input[type="checkbox"] {
  margin: 4px 0 0;
  margin-top: 1px \9;
  line-height: normal;
}
input[type="file"] {
  display: block;
}
input[type="range"] {
  display: block;
  width: 100%;
}
select[multiple],
select[size] {
  height: auto;
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
output {
  display: block;
  padding-top: 7px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
}
.form-control {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.form-control::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.form-control:-ms-input-placeholder {
  color: #999;
}
.form-control::-webkit-input-placeholder {
  color: #999;
}
.form-control::-ms-expand {
  border: 0;
  background-color: transparent;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
  background-color: #eeeeee;
  opacity: 1;
}
.form-control[disabled],
fieldset[disabled] .form-control {
  cursor: not-allowed;
}
textarea.form-control {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
  input[type="date"].form-control,
  input[type="time"].form-control,
  input[type="datetime-local"].form-control,
  input[type="month"].form-control {
    line-height: 32px;
  }
  input[type="date"].input-sm,
  input[type="time"].input-sm,
  input[type="datetime-local"].input-sm,
  input[type="month"].input-sm,
  .input-group-sm input[type="date"],
  .input-group-sm input[type="time"],
  .input-group-sm input[type="datetime-local"],
  .input-group-sm input[type="month"] {
    line-height: 30px;
  }
  input[type="date"].input-lg,
  input[type="time"].input-lg,
  input[type="datetime-local"].input-lg,
  input[type="month"].input-lg,
  .input-group-lg input[type="date"],
  .input-group-lg input[type="time"],
  .input-group-lg input[type="datetime-local"],
  .input-group-lg input[type="month"] {
    line-height: 45px;
  }
}
.form-group {
  margin-bottom: 15px;
}
.radio,
.checkbox {
  position: relative;
  display: block;
  margin-top: 10px;
  margin-bottom: 10px;
}
.radio label,
.checkbox label {
  min-height: 18px;
  padding-left: 20px;
  margin-bottom: 0;
  font-weight: normal;
  cursor: pointer;
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
  position: absolute;
  margin-left: -20px;
  margin-top: 4px \9;
}
.radio + .radio,
.checkbox + .checkbox {
  margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
  position: relative;
  display: inline-block;
  padding-left: 20px;
  margin-bottom: 0;
  vertical-align: middle;
  font-weight: normal;
  cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
  margin-top: 0;
  margin-left: 10px;
}
input[type="radio"][disabled],
input[type="checkbox"][disabled],
input[type="radio"].disabled,
input[type="checkbox"].disabled,
fieldset[disabled] input[type="radio"],
fieldset[disabled] input[type="checkbox"] {
  cursor: not-allowed;
}
.radio-inline.disabled,
.checkbox-inline.disabled,
fieldset[disabled] .radio-inline,
fieldset[disabled] .checkbox-inline {
  cursor: not-allowed;
}
.radio.disabled label,
.checkbox.disabled label,
fieldset[disabled] .radio label,
fieldset[disabled] .checkbox label {
  cursor: not-allowed;
}
.form-control-static {
  padding-top: 7px;
  padding-bottom: 7px;
  margin-bottom: 0;
  min-height: 31px;
}
.form-control-static.input-lg,
.form-control-static.input-sm {
  padding-left: 0;
  padding-right: 0;
}
.input-sm {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-sm {
  height: 30px;
  line-height: 30px;
}
textarea.input-sm,
select[multiple].input-sm {
  height: auto;
}
.form-group-sm .form-control {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.form-group-sm select.form-control {
  height: 30px;
  line-height: 30px;
}
.form-group-sm textarea.form-control,
.form-group-sm select[multiple].form-control {
  height: auto;
}
.form-group-sm .form-control-static {
  height: 30px;
  min-height: 30px;
  padding: 6px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.input-lg {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-lg {
  height: 45px;
  line-height: 45px;
}
textarea.input-lg,
select[multiple].input-lg {
  height: auto;
}
.form-group-lg .form-control {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.form-group-lg select.form-control {
  height: 45px;
  line-height: 45px;
}
.form-group-lg textarea.form-control,
.form-group-lg select[multiple].form-control {
  height: auto;
}
.form-group-lg .form-control-static {
  height: 45px;
  min-height: 35px;
  padding: 11px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.has-feedback {
  position: relative;
}
.has-feedback .form-control {
  padding-right: 40px;
}
.form-control-feedback {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 2;
  display: block;
  width: 32px;
  height: 32px;
  line-height: 32px;
  text-align: center;
  pointer-events: none;
}
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback,
.form-group-lg .form-control + .form-control-feedback {
  width: 45px;
  height: 45px;
  line-height: 45px;
}
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback,
.form-group-sm .form-control + .form-control-feedback {
  width: 30px;
  height: 30px;
  line-height: 30px;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline,
.has-success.radio label,
.has-success.checkbox label,
.has-success.radio-inline label,
.has-success.checkbox-inline label {
  color: #3c763d;
}
.has-success .form-control {
  border-color: #3c763d;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-success .form-control:focus {
  border-color: #2b542c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
}
.has-success .input-group-addon {
  color: #3c763d;
  border-color: #3c763d;
  background-color: #dff0d8;
}
.has-success .form-control-feedback {
  color: #3c763d;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline,
.has-warning.radio label,
.has-warning.checkbox label,
.has-warning.radio-inline label,
.has-warning.checkbox-inline label {
  color: #8a6d3b;
}
.has-warning .form-control {
  border-color: #8a6d3b;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-warning .form-control:focus {
  border-color: #66512c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
}
.has-warning .input-group-addon {
  color: #8a6d3b;
  border-color: #8a6d3b;
  background-color: #fcf8e3;
}
.has-warning .form-control-feedback {
  color: #8a6d3b;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline,
.has-error.radio label,
.has-error.checkbox label,
.has-error.radio-inline label,
.has-error.checkbox-inline label {
  color: #a94442;
}
.has-error .form-control {
  border-color: #a94442;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-error .form-control:focus {
  border-color: #843534;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
}
.has-error .input-group-addon {
  color: #a94442;
  border-color: #a94442;
  background-color: #f2dede;
}
.has-error .form-control-feedback {
  color: #a94442;
}
.has-feedback label ~ .form-control-feedback {
  top: 23px;
}
.has-feedback label.sr-only ~ .form-control-feedback {
  top: 0;
}
.help-block {
  display: block;
  margin-top: 5px;
  margin-bottom: 10px;
  color: #404040;
}
@media (min-width: 768px) {
  .form-inline .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .form-inline .form-control-static {
    display: inline-block;
  }
  .form-inline .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .form-inline .input-group .input-group-addon,
  .form-inline .input-group .input-group-btn,
  .form-inline .input-group .form-control {
    width: auto;
  }
  .form-inline .input-group > .form-control {
    width: 100%;
  }
  .form-inline .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio,
  .form-inline .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio label,
  .form-inline .checkbox label {
    padding-left: 0;
  }
  .form-inline .radio input[type="radio"],
  .form-inline .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .form-inline .has-feedback .form-control-feedback {
    top: 0;
  }
}
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
  margin-top: 0;
  margin-bottom: 0;
  padding-top: 7px;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
  min-height: 25px;
}
.form-horizontal .form-group {
  margin-left: 0px;
  margin-right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .control-label {
    text-align: right;
    margin-bottom: 0;
    padding-top: 7px;
  }
}
.form-horizontal .has-feedback .form-control-feedback {
  right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .form-group-lg .control-label {
    padding-top: 11px;
    font-size: 17px;
  }
}
@media (min-width: 768px) {
  .form-horizontal .form-group-sm .control-label {
    padding-top: 6px;
    font-size: 12px;
  }
}
.btn {
  display: inline-block;
  margin-bottom: 0;
  font-weight: normal;
  text-align: center;
  vertical-align: middle;
  touch-action: manipulation;
  cursor: pointer;
  background-image: none;
  border: 1px solid transparent;
  white-space: nowrap;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  border-radius: 2px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.btn:focus,
.btn:active:focus,
.btn.active:focus,
.btn.focus,
.btn:active.focus,
.btn.active.focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
.btn:hover,
.btn:focus,
.btn.focus {
  color: #333;
  text-decoration: none;
}
.btn:active,
.btn.active {
  outline: 0;
  background-image: none;
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
  cursor: not-allowed;
  opacity: 0.65;
  filter: alpha(opacity=65);
  -webkit-box-shadow: none;
  box-shadow: none;
}
a.btn.disabled,
fieldset[disabled] a.btn {
  pointer-events: none;
}
.btn-default {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.btn-default:focus,
.btn-default.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.btn-default:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active:hover,
.btn-default.active:hover,
.open > .dropdown-toggle.btn-default:hover,
.btn-default:active:focus,
.btn-default.active:focus,
.open > .dropdown-toggle.btn-default:focus,
.btn-default:active.focus,
.btn-default.active.focus,
.open > .dropdown-toggle.btn-default.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  background-image: none;
}
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus {
  background-color: #fff;
  border-color: #ccc;
}
.btn-default .badge {
  color: #fff;
  background-color: #333;
}
.btn-primary {
  color: #fff;
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary:focus,
.btn-primary.focus {
  color: #fff;
  background-color: #286090;
  border-color: #122b40;
}
.btn-primary:hover {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active:hover,
.btn-primary.active:hover,
.open > .dropdown-toggle.btn-primary:hover,
.btn-primary:active:focus,
.btn-primary.active:focus,
.open > .dropdown-toggle.btn-primary:focus,
.btn-primary:active.focus,
.btn-primary.active.focus,
.open > .dropdown-toggle.btn-primary.focus {
  color: #fff;
  background-color: #204d74;
  border-color: #122b40;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  background-image: none;
}
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus {
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary .badge {
  color: #337ab7;
  background-color: #fff;
}
.btn-success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success:focus,
.btn-success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.btn-success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active:hover,
.btn-success.active:hover,
.open > .dropdown-toggle.btn-success:hover,
.btn-success:active:focus,
.btn-success.active:focus,
.open > .dropdown-toggle.btn-success:focus,
.btn-success:active.focus,
.btn-success.active.focus,
.open > .dropdown-toggle.btn-success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  background-image: none;
}
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.btn-info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info:focus,
.btn-info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.btn-info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active:hover,
.btn-info.active:hover,
.open > .dropdown-toggle.btn-info:hover,
.btn-info:active:focus,
.btn-info.active:focus,
.open > .dropdown-toggle.btn-info:focus,
.btn-info:active.focus,
.btn-info.active.focus,
.open > .dropdown-toggle.btn-info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  background-image: none;
}
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.btn-warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning:focus,
.btn-warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.btn-warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active:hover,
.btn-warning.active:hover,
.open > .dropdown-toggle.btn-warning:hover,
.btn-warning:active:focus,
.btn-warning.active:focus,
.open > .dropdown-toggle.btn-warning:focus,
.btn-warning:active.focus,
.btn-warning.active.focus,
.open > .dropdown-toggle.btn-warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  background-image: none;
}
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.btn-danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger:focus,
.btn-danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.btn-danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active:hover,
.btn-danger.active:hover,
.open > .dropdown-toggle.btn-danger:hover,
.btn-danger:active:focus,
.btn-danger.active:focus,
.open > .dropdown-toggle.btn-danger:focus,
.btn-danger:active.focus,
.btn-danger.active.focus,
.open > .dropdown-toggle.btn-danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  background-image: none;
}
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger .badge {
  color: #d9534f;
  background-color: #fff;
}
.btn-link {
  color: #337ab7;
  font-weight: normal;
  border-radius: 0;
}
.btn-link,
.btn-link:active,
.btn-link.active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
  background-color: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn-link,
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
  border-color: transparent;
}
.btn-link:hover,
.btn-link:focus {
  color: #23527c;
  text-decoration: underline;
  background-color: transparent;
}
.btn-link[disabled]:hover,
fieldset[disabled] .btn-link:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:focus {
  color: #777777;
  text-decoration: none;
}
.btn-lg,
.btn-group-lg > .btn {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.btn-sm,
.btn-group-sm > .btn {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-xs,
.btn-group-xs > .btn {
  padding: 1px 5px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-block {
  display: block;
  width: 100%;
}
.btn-block + .btn-block {
  margin-top: 5px;
}
input[type="submit"].btn-block,
input[type="reset"].btn-block,
input[type="button"].btn-block {
  width: 100%;
}
.fade {
  opacity: 0;
  -webkit-transition: opacity 0.15s linear;
  -o-transition: opacity 0.15s linear;
  transition: opacity 0.15s linear;
}
.fade.in {
  opacity: 1;
}
.collapse {
  display: none;
}
.collapse.in {
  display: block;
}
tr.collapse.in {
  display: table-row;
}
tbody.collapse.in {
  display: table-row-group;
}
.collapsing {
  position: relative;
  height: 0;
  overflow: hidden;
  -webkit-transition-property: height, visibility;
  transition-property: height, visibility;
  -webkit-transition-duration: 0.35s;
  transition-duration: 0.35s;
  -webkit-transition-timing-function: ease;
  transition-timing-function: ease;
}
.caret {
  display: inline-block;
  width: 0;
  height: 0;
  margin-left: 2px;
  vertical-align: middle;
  border-top: 4px dashed;
  border-top: 4px solid \9;
  border-right: 4px solid transparent;
  border-left: 4px solid transparent;
}
.dropup,
.dropdown {
  position: relative;
}
.dropdown-toggle:focus {
  outline: 0;
}
.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1000;
  display: none;
  float: left;
  min-width: 160px;
  padding: 5px 0;
  margin: 2px 0 0;
  list-style: none;
  font-size: 13px;
  text-align: left;
  background-color: #fff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.15);
  border-radius: 2px;
  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  background-clip: padding-box;
}
.dropdown-menu.pull-right {
  right: 0;
  left: auto;
}
.dropdown-menu .divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.dropdown-menu > li > a {
  display: block;
  padding: 3px 20px;
  clear: both;
  font-weight: normal;
  line-height: 1.42857143;
  color: #333333;
  white-space: nowrap;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
  text-decoration: none;
  color: #262626;
  background-color: #f5f5f5;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
  color: #fff;
  text-decoration: none;
  outline: 0;
  background-color: #337ab7;
}
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  color: #777777;
}
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  text-decoration: none;
  background-color: transparent;
  background-image: none;
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  cursor: not-allowed;
}
.open > .dropdown-menu {
  display: block;
}
.open > a {
  outline: 0;
}
.dropdown-menu-right {
  left: auto;
  right: 0;
}
.dropdown-menu-left {
  left: 0;
  right: auto;
}
.dropdown-header {
  display: block;
  padding: 3px 20px;
  font-size: 12px;
  line-height: 1.42857143;
  color: #777777;
  white-space: nowrap;
}
.dropdown-backdrop {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  z-index: 990;
}
.pull-right > .dropdown-menu {
  right: 0;
  left: auto;
}
.dropup .caret,
.navbar-fixed-bottom .dropdown .caret {
  border-top: 0;
  border-bottom: 4px dashed;
  border-bottom: 4px solid \9;
  content: "";
}
.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
  top: auto;
  bottom: 100%;
  margin-bottom: 2px;
}
@media (min-width: 541px) {
  .navbar-right .dropdown-menu {
    left: auto;
    right: 0;
  }
  .navbar-right .dropdown-menu-left {
    left: 0;
    right: auto;
  }
}
.btn-group,
.btn-group-vertical {
  position: relative;
  display: inline-block;
  vertical-align: middle;
}
.btn-group > .btn,
.btn-group-vertical > .btn {
  position: relative;
  float: left;
}
.btn-group > .btn:hover,
.btn-group-vertical > .btn:hover,
.btn-group > .btn:focus,
.btn-group-vertical > .btn:focus,
.btn-group > .btn:active,
.btn-group-vertical > .btn:active,
.btn-group > .btn.active,
.btn-group-vertical > .btn.active {
  z-index: 2;
}
.btn-group .btn + .btn,
.btn-group .btn + .btn-group,
.btn-group .btn-group + .btn,
.btn-group .btn-group + .btn-group {
  margin-left: -1px;
}
.btn-toolbar {
  margin-left: -5px;
}
.btn-toolbar .btn,
.btn-toolbar .btn-group,
.btn-toolbar .input-group {
  float: left;
}
.btn-toolbar > .btn,
.btn-toolbar > .btn-group,
.btn-toolbar > .input-group {
  margin-left: 5px;
}
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
  border-radius: 0;
}
.btn-group > .btn:first-child {
  margin-left: 0;
}
.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle:not(:first-child) {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group > .btn-group {
  float: left;
}
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
  outline: 0;
}
.btn-group > .btn + .dropdown-toggle {
  padding-left: 8px;
  padding-right: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
  padding-left: 12px;
  padding-right: 12px;
}
.btn-group.open .dropdown-toggle {
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn-group.open .dropdown-toggle.btn-link {
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn .caret {
  margin-left: 0;
}
.btn-lg .caret {
  border-width: 5px 5px 0;
  border-bottom-width: 0;
}
.dropup .btn-lg .caret {
  border-width: 0 5px 5px;
}
.btn-group-vertical > .btn,
.btn-group-vertical > .btn-group,
.btn-group-vertical > .btn-group > .btn {
  display: block;
  float: none;
  width: 100%;
  max-width: 100%;
}
.btn-group-vertical > .btn-group > .btn {
  float: none;
}
.btn-group-vertical > .btn + .btn,
.btn-group-vertical > .btn + .btn-group,
.btn-group-vertical > .btn-group + .btn,
.btn-group-vertical > .btn-group + .btn-group {
  margin-top: -1px;
  margin-left: 0;
}
.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.btn-group-vertical > .btn:first-child:not(:last-child) {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn:last-child:not(:first-child) {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.btn-group-justified {
  display: table;
  width: 100%;
  table-layout: fixed;
  border-collapse: separate;
}
.btn-group-justified > .btn,
.btn-group-justified > .btn-group {
  float: none;
  display: table-cell;
  width: 1%;
}
.btn-group-justified > .btn-group .btn {
  width: 100%;
}
.btn-group-justified > .btn-group .dropdown-menu {
  left: auto;
}
[data-toggle="buttons"] > .btn input[type="radio"],
[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
[data-toggle="buttons"] > .btn input[type="checkbox"],
[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
  position: absolute;
  clip: rect(0, 0, 0, 0);
  pointer-events: none;
}
.input-group {
  position: relative;
  display: table;
  border-collapse: separate;
}
.input-group[class*="col-"] {
  float: none;
  padding-left: 0;
  padding-right: 0;
}
.input-group .form-control {
  position: relative;
  z-index: 2;
  float: left;
  width: 100%;
  margin-bottom: 0;
}
.input-group .form-control:focus {
  z-index: 3;
}
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-group-lg > .form-control,
select.input-group-lg > .input-group-addon,
select.input-group-lg > .input-group-btn > .btn {
  height: 45px;
  line-height: 45px;
}
textarea.input-group-lg > .form-control,
textarea.input-group-lg > .input-group-addon,
textarea.input-group-lg > .input-group-btn > .btn,
select[multiple].input-group-lg > .form-control,
select[multiple].input-group-lg > .input-group-addon,
select[multiple].input-group-lg > .input-group-btn > .btn {
  height: auto;
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-group-sm > .form-control,
select.input-group-sm > .input-group-addon,
select.input-group-sm > .input-group-btn > .btn {
  height: 30px;
  line-height: 30px;
}
textarea.input-group-sm > .form-control,
textarea.input-group-sm > .input-group-addon,
textarea.input-group-sm > .input-group-btn > .btn,
select[multiple].input-group-sm > .form-control,
select[multiple].input-group-sm > .input-group-addon,
select[multiple].input-group-sm > .input-group-btn > .btn {
  height: auto;
}
.input-group-addon,
.input-group-btn,
.input-group .form-control {
  display: table-cell;
}
.input-group-addon:not(:first-child):not(:last-child),
.input-group-btn:not(:first-child):not(:last-child),
.input-group .form-control:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.input-group-addon,
.input-group-btn {
  width: 1%;
  white-space: nowrap;
  vertical-align: middle;
}
.input-group-addon {
  padding: 6px 12px;
  font-size: 13px;
  font-weight: normal;
  line-height: 1;
  color: #555555;
  text-align: center;
  background-color: #eeeeee;
  border: 1px solid #ccc;
  border-radius: 2px;
}
.input-group-addon.input-sm {
  padding: 5px 10px;
  font-size: 12px;
  border-radius: 1px;
}
.input-group-addon.input-lg {
  padding: 10px 16px;
  font-size: 17px;
  border-radius: 3px;
}
.input-group-addon input[type="radio"],
.input-group-addon input[type="checkbox"] {
  margin-top: 0;
}
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.input-group-addon:first-child {
  border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child),
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.input-group-addon:last-child {
  border-left: 0;
}
.input-group-btn {
  position: relative;
  font-size: 0;
  white-space: nowrap;
}
.input-group-btn > .btn {
  position: relative;
}
.input-group-btn > .btn + .btn {
  margin-left: -1px;
}
.input-group-btn > .btn:hover,
.input-group-btn > .btn:focus,
.input-group-btn > .btn:active {
  z-index: 2;
}
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group {
  margin-right: -1px;
}
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group {
  z-index: 2;
  margin-left: -1px;
}
.nav {
  margin-bottom: 0;
  padding-left: 0;
  list-style: none;
}
.nav > li {
  position: relative;
  display: block;
}
.nav > li > a {
  position: relative;
  display: block;
  padding: 10px 15px;
}
.nav > li > a:hover,
.nav > li > a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.nav > li.disabled > a {
  color: #777777;
}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
  color: #777777;
  text-decoration: none;
  background-color: transparent;
  cursor: not-allowed;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
  background-color: #eeeeee;
  border-color: #337ab7;
}
.nav .nav-divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.nav > li > a > img {
  max-width: none;
}
.nav-tabs {
  border-bottom: 1px solid #ddd;
}
.nav-tabs > li {
  float: left;
  margin-bottom: -1px;
}
.nav-tabs > li > a {
  margin-right: 2px;
  line-height: 1.42857143;
  border: 1px solid transparent;
  border-radius: 2px 2px 0 0;
}
.nav-tabs > li > a:hover {
  border-color: #eeeeee #eeeeee #ddd;
}
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
  color: #555555;
  background-color: #fff;
  border: 1px solid #ddd;
  border-bottom-color: transparent;
  cursor: default;
}
.nav-tabs.nav-justified {
  width: 100%;
  border-bottom: 0;
}
.nav-tabs.nav-justified > li {
  float: none;
}
.nav-tabs.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-tabs.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-tabs.nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs.nav-justified > li > a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs.nav-justified > .active > a,
  .nav-tabs.nav-justified > .active > a:hover,
  .nav-tabs.nav-justified > .active > a:focus {
    border-bottom-color: #fff;
  }
}
.nav-pills > li {
  float: left;
}
.nav-pills > li > a {
  border-radius: 2px;
}
.nav-pills > li + li {
  margin-left: 2px;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
  color: #fff;
  background-color: #337ab7;
}
.nav-stacked > li {
  float: none;
}
.nav-stacked > li + li {
  margin-top: 2px;
  margin-left: 0;
}
.nav-justified {
  width: 100%;
}
.nav-justified > li {
  float: none;
}
.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs-justified {
  border-bottom: 0;
}
.nav-tabs-justified > li > a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs-justified > .active > a,
  .nav-tabs-justified > .active > a:hover,
  .nav-tabs-justified > .active > a:focus {
    border-bottom-color: #fff;
  }
}
.tab-content > .tab-pane {
  display: none;
}
.tab-content > .active {
  display: block;
}
.nav-tabs .dropdown-menu {
  margin-top: -1px;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar {
  position: relative;
  min-height: 30px;
  margin-bottom: 18px;
  border: 1px solid transparent;
}
@media (min-width: 541px) {
  .navbar {
    border-radius: 2px;
  }
}
@media (min-width: 541px) {
  .navbar-header {
    float: left;
  }
}
.navbar-collapse {
  overflow-x: visible;
  padding-right: 0px;
  padding-left: 0px;
  border-top: 1px solid transparent;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  -webkit-overflow-scrolling: touch;
}
.navbar-collapse.in {
  overflow-y: auto;
}
@media (min-width: 541px) {
  .navbar-collapse {
    width: auto;
    border-top: 0;
    box-shadow: none;
  }
  .navbar-collapse.collapse {
    display: block !important;
    height: auto !important;
    padding-bottom: 0;
    overflow: visible !important;
  }
  .navbar-collapse.in {
    overflow-y: visible;
  }
  .navbar-fixed-top .navbar-collapse,
  .navbar-static-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    padding-left: 0;
    padding-right: 0;
  }
}
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
  max-height: 340px;
}
@media (max-device-width: 540px) and (orientation: landscape) {
  .navbar-fixed-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    max-height: 200px;
  }
}
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
  margin-right: 0px;
  margin-left: 0px;
}
@media (min-width: 541px) {
  .container > .navbar-header,
  .container-fluid > .navbar-header,
  .container > .navbar-collapse,
  .container-fluid > .navbar-collapse {
    margin-right: 0;
    margin-left: 0;
  }
}
.navbar-static-top {
  z-index: 1000;
  border-width: 0 0 1px;
}
@media (min-width: 541px) {
  .navbar-static-top {
    border-radius: 0;
  }
}
.navbar-fixed-top,
.navbar-fixed-bottom {
  position: fixed;
  right: 0;
  left: 0;
  z-index: 1030;
}
@media (min-width: 541px) {
  .navbar-fixed-top,
  .navbar-fixed-bottom {
    border-radius: 0;
  }
}
.navbar-fixed-top {
  top: 0;
  border-width: 0 0 1px;
}
.navbar-fixed-bottom {
  bottom: 0;
  margin-bottom: 0;
  border-width: 1px 0 0;
}
.navbar-brand {
  float: left;
  padding: 6px 0px;
  font-size: 17px;
  line-height: 18px;
  height: 30px;
}
.navbar-brand:hover,
.navbar-brand:focus {
  text-decoration: none;
}
.navbar-brand > img {
  display: block;
}
@media (min-width: 541px) {
  .navbar > .container .navbar-brand,
  .navbar > .container-fluid .navbar-brand {
    margin-left: 0px;
  }
}
.navbar-toggle {
  position: relative;
  float: right;
  margin-right: 0px;
  padding: 9px 10px;
  margin-top: -2px;
  margin-bottom: -2px;
  background-color: transparent;
  background-image: none;
  border: 1px solid transparent;
  border-radius: 2px;
}
.navbar-toggle:focus {
  outline: 0;
}
.navbar-toggle .icon-bar {
  display: block;
  width: 22px;
  height: 2px;
  border-radius: 1px;
}
.navbar-toggle .icon-bar + .icon-bar {
  margin-top: 4px;
}
@media (min-width: 541px) {
  .navbar-toggle {
    display: none;
  }
}
.navbar-nav {
  margin: 3px 0px;
}
.navbar-nav > li > a {
  padding-top: 10px;
  padding-bottom: 10px;
  line-height: 18px;
}
@media (max-width: 540px) {
  .navbar-nav .open .dropdown-menu {
    position: static;
    float: none;
    width: auto;
    margin-top: 0;
    background-color: transparent;
    border: 0;
    box-shadow: none;
  }
  .navbar-nav .open .dropdown-menu > li > a,
  .navbar-nav .open .dropdown-menu .dropdown-header {
    padding: 5px 15px 5px 25px;
  }
  .navbar-nav .open .dropdown-menu > li > a {
    line-height: 18px;
  }
  .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-nav .open .dropdown-menu > li > a:focus {
    background-image: none;
  }
}
@media (min-width: 541px) {
  .navbar-nav {
    float: left;
    margin: 0;
  }
  .navbar-nav > li {
    float: left;
  }
  .navbar-nav > li > a {
    padding-top: 6px;
    padding-bottom: 6px;
  }
}
.navbar-form {
  margin-left: 0px;
  margin-right: 0px;
  padding: 10px 0px;
  border-top: 1px solid transparent;
  border-bottom: 1px solid transparent;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  margin-top: -1px;
  margin-bottom: -1px;
}
@media (min-width: 768px) {
  .navbar-form .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .navbar-form .form-control-static {
    display: inline-block;
  }
  .navbar-form .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .navbar-form .input-group .input-group-addon,
  .navbar-form .input-group .input-group-btn,
  .navbar-form .input-group .form-control {
    width: auto;
  }
  .navbar-form .input-group > .form-control {
    width: 100%;
  }
  .navbar-form .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio,
  .navbar-form .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio label,
  .navbar-form .checkbox label {
    padding-left: 0;
  }
  .navbar-form .radio input[type="radio"],
  .navbar-form .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .navbar-form .has-feedback .form-control-feedback {
    top: 0;
  }
}
@media (max-width: 540px) {
  .navbar-form .form-group {
    margin-bottom: 5px;
  }
  .navbar-form .form-group:last-child {
    margin-bottom: 0;
  }
}
@media (min-width: 541px) {
  .navbar-form {
    width: auto;
    border: 0;
    margin-left: 0;
    margin-right: 0;
    padding-top: 0;
    padding-bottom: 0;
    -webkit-box-shadow: none;
    box-shadow: none;
  }
}
.navbar-nav > li > .dropdown-menu {
  margin-top: 0;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
  margin-bottom: 0;
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.navbar-btn {
  margin-top: -1px;
  margin-bottom: -1px;
}
.navbar-btn.btn-sm {
  margin-top: 0px;
  margin-bottom: 0px;
}
.navbar-btn.btn-xs {
  margin-top: 4px;
  margin-bottom: 4px;
}
.navbar-text {
  margin-top: 6px;
  margin-bottom: 6px;
}
@media (min-width: 541px) {
  .navbar-text {
    float: left;
    margin-left: 0px;
    margin-right: 0px;
  }
}
@media (min-width: 541px) {
  .navbar-left {
    float: left !important;
    float: left;
  }
  .navbar-right {
    float: right !important;
    float: right;
    margin-right: 0px;
  }
  .navbar-right ~ .navbar-right {
    margin-right: 0;
  }
}
.navbar-default {
  background-color: #f8f8f8;
  border-color: #e7e7e7;
}
.navbar-default .navbar-brand {
  color: #777;
}
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
  color: #5e5e5e;
  background-color: transparent;
}
.navbar-default .navbar-text {
  color: #777;
}
.navbar-default .navbar-nav > li > a {
  color: #777;
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
  color: #333;
  background-color: transparent;
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .active > a:focus {
  color: #555;
  background-color: #e7e7e7;
}
.navbar-default .navbar-nav > .disabled > a,
.navbar-default .navbar-nav > .disabled > a:hover,
.navbar-default .navbar-nav > .disabled > a:focus {
  color: #ccc;
  background-color: transparent;
}
.navbar-default .navbar-toggle {
  border-color: #ddd;
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
  background-color: #ddd;
}
.navbar-default .navbar-toggle .icon-bar {
  background-color: #888;
}
.navbar-default .navbar-collapse,
.navbar-default .navbar-form {
  border-color: #e7e7e7;
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .open > a:hover,
.navbar-default .navbar-nav > .open > a:focus {
  background-color: #e7e7e7;
  color: #555;
}
@media (max-width: 540px) {
  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
    color: #777;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #333;
    background-color: transparent;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #555;
    background-color: #e7e7e7;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #ccc;
    background-color: transparent;
  }
}
.navbar-default .navbar-link {
  color: #777;
}
.navbar-default .navbar-link:hover {
  color: #333;
}
.navbar-default .btn-link {
  color: #777;
}
.navbar-default .btn-link:hover,
.navbar-default .btn-link:focus {
  color: #333;
}
.navbar-default .btn-link[disabled]:hover,
fieldset[disabled] .navbar-default .btn-link:hover,
.navbar-default .btn-link[disabled]:focus,
fieldset[disabled] .navbar-default .btn-link:focus {
  color: #ccc;
}
.navbar-inverse {
  background-color: #222;
  border-color: #080808;
}
.navbar-inverse .navbar-brand {
  color: #9d9d9d;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-text {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
  color: #fff;
  background-color: #080808;
}
.navbar-inverse .navbar-nav > .disabled > a,
.navbar-inverse .navbar-nav > .disabled > a:hover,
.navbar-inverse .navbar-nav > .disabled > a:focus {
  color: #444;
  background-color: transparent;
}
.navbar-inverse .navbar-toggle {
  border-color: #333;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
  background-color: #333;
}
.navbar-inverse .navbar-toggle .icon-bar {
  background-color: #fff;
}
.navbar-inverse .navbar-collapse,
.navbar-inverse .navbar-form {
  border-color: #101010;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .open > a:hover,
.navbar-inverse .navbar-nav > .open > a:focus {
  background-color: #080808;
  color: #fff;
}
@media (max-width: 540px) {
  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
    border-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
    color: #9d9d9d;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #fff;
    background-color: transparent;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #fff;
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #444;
    background-color: transparent;
  }
}
.navbar-inverse .navbar-link {
  color: #9d9d9d;
}
.navbar-inverse .navbar-link:hover {
  color: #fff;
}
.navbar-inverse .btn-link {
  color: #9d9d9d;
}
.navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link:focus {
  color: #fff;
}
.navbar-inverse .btn-link[disabled]:hover,
fieldset[disabled] .navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link[disabled]:focus,
fieldset[disabled] .navbar-inverse .btn-link:focus {
  color: #444;
}
.breadcrumb {
  padding: 8px 15px;
  margin-bottom: 18px;
  list-style: none;
  background-color: #f5f5f5;
  border-radius: 2px;
}
.breadcrumb > li {
  display: inline-block;
}
.breadcrumb > li + li:before {
  content: "/\00a0";
  padding: 0 5px;
  color: #5e5e5e;
}
.breadcrumb > .active {
  color: #777777;
}
.pagination {
  display: inline-block;
  padding-left: 0;
  margin: 18px 0;
  border-radius: 2px;
}
.pagination > li {
  display: inline;
}
.pagination > li > a,
.pagination > li > span {
  position: relative;
  float: left;
  padding: 6px 12px;
  line-height: 1.42857143;
  text-decoration: none;
  color: #337ab7;
  background-color: #fff;
  border: 1px solid #ddd;
  margin-left: -1px;
}
.pagination > li:first-child > a,
.pagination > li:first-child > span {
  margin-left: 0;
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
  border-bottom-right-radius: 2px;
  border-top-right-radius: 2px;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
  z-index: 2;
  color: #23527c;
  background-color: #eeeeee;
  border-color: #ddd;
}
.pagination > .active > a,
.pagination > .active > span,
.pagination > .active > a:hover,
.pagination > .active > span:hover,
.pagination > .active > a:focus,
.pagination > .active > span:focus {
  z-index: 3;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
  cursor: default;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
  color: #777777;
  background-color: #fff;
  border-color: #ddd;
  cursor: not-allowed;
}
.pagination-lg > li > a,
.pagination-lg > li > span {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.pagination-lg > li:first-child > a,
.pagination-lg > li:first-child > span {
  border-bottom-left-radius: 3px;
  border-top-left-radius: 3px;
}
.pagination-lg > li:last-child > a,
.pagination-lg > li:last-child > span {
  border-bottom-right-radius: 3px;
  border-top-right-radius: 3px;
}
.pagination-sm > li > a,
.pagination-sm > li > span {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.pagination-sm > li:first-child > a,
.pagination-sm > li:first-child > span {
  border-bottom-left-radius: 1px;
  border-top-left-radius: 1px;
}
.pagination-sm > li:last-child > a,
.pagination-sm > li:last-child > span {
  border-bottom-right-radius: 1px;
  border-top-right-radius: 1px;
}
.pager {
  padding-left: 0;
  margin: 18px 0;
  list-style: none;
  text-align: center;
}
.pager li {
  display: inline;
}
.pager li > a,
.pager li > span {
  display: inline-block;
  padding: 5px 14px;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 15px;
}
.pager li > a:hover,
.pager li > a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.pager .next > a,
.pager .next > span {
  float: right;
}
.pager .previous > a,
.pager .previous > span {
  float: left;
}
.pager .disabled > a,
.pager .disabled > a:hover,
.pager .disabled > a:focus,
.pager .disabled > span {
  color: #777777;
  background-color: #fff;
  cursor: not-allowed;
}
.label {
  display: inline;
  padding: .2em .6em .3em;
  font-size: 75%;
  font-weight: bold;
  line-height: 1;
  color: #fff;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: .25em;
}
a.label:hover,
a.label:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.label:empty {
  display: none;
}
.btn .label {
  position: relative;
  top: -1px;
}
.label-default {
  background-color: #777777;
}
.label-default[href]:hover,
.label-default[href]:focus {
  background-color: #5e5e5e;
}
.label-primary {
  background-color: #337ab7;
}
.label-primary[href]:hover,
.label-primary[href]:focus {
  background-color: #286090;
}
.label-success {
  background-color: #5cb85c;
}
.label-success[href]:hover,
.label-success[href]:focus {
  background-color: #449d44;
}
.label-info {
  background-color: #5bc0de;
}
.label-info[href]:hover,
.label-info[href]:focus {
  background-color: #31b0d5;
}
.label-warning {
  background-color: #f0ad4e;
}
.label-warning[href]:hover,
.label-warning[href]:focus {
  background-color: #ec971f;
}
.label-danger {
  background-color: #d9534f;
}
.label-danger[href]:hover,
.label-danger[href]:focus {
  background-color: #c9302c;
}
.badge {
  display: inline-block;
  min-width: 10px;
  padding: 3px 7px;
  font-size: 12px;
  font-weight: bold;
  color: #fff;
  line-height: 1;
  vertical-align: middle;
  white-space: nowrap;
  text-align: center;
  background-color: #777777;
  border-radius: 10px;
}
.badge:empty {
  display: none;
}
.btn .badge {
  position: relative;
  top: -1px;
}
.btn-xs .badge,
.btn-group-xs > .btn .badge {
  top: 0;
  padding: 1px 5px;
}
a.badge:hover,
a.badge:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.list-group-item.active > .badge,
.nav-pills > .active > a > .badge {
  color: #337ab7;
  background-color: #fff;
}
.list-group-item > .badge {
  float: right;
}
.list-group-item > .badge + .badge {
  margin-right: 5px;
}
.nav-pills > li > a > .badge {
  margin-left: 3px;
}
.jumbotron {
  padding-top: 30px;
  padding-bottom: 30px;
  margin-bottom: 30px;
  color: inherit;
  background-color: #eeeeee;
}
.jumbotron h1,
.jumbotron .h1 {
  color: inherit;
}
.jumbotron p {
  margin-bottom: 15px;
  font-size: 20px;
  font-weight: 200;
}
.jumbotron > hr {
  border-top-color: #d5d5d5;
}
.container .jumbotron,
.container-fluid .jumbotron {
  border-radius: 3px;
  padding-left: 0px;
  padding-right: 0px;
}
.jumbotron .container {
  max-width: 100%;
}
@media screen and (min-width: 768px) {
  .jumbotron {
    padding-top: 48px;
    padding-bottom: 48px;
  }
  .container .jumbotron,
  .container-fluid .jumbotron {
    padding-left: 60px;
    padding-right: 60px;
  }
  .jumbotron h1,
  .jumbotron .h1 {
    font-size: 59px;
  }
}
.thumbnail {
  display: block;
  padding: 4px;
  margin-bottom: 18px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: border 0.2s ease-in-out;
  -o-transition: border 0.2s ease-in-out;
  transition: border 0.2s ease-in-out;
}
.thumbnail > img,
.thumbnail a > img {
  margin-left: auto;
  margin-right: auto;
}
a.thumbnail:hover,
a.thumbnail:focus,
a.thumbnail.active {
  border-color: #337ab7;
}
.thumbnail .caption {
  padding: 9px;
  color: #000;
}
.alert {
  padding: 15px;
  margin-bottom: 18px;
  border: 1px solid transparent;
  border-radius: 2px;
}
.alert h4 {
  margin-top: 0;
  color: inherit;
}
.alert .alert-link {
  font-weight: bold;
}
.alert > p,
.alert > ul {
  margin-bottom: 0;
}
.alert > p + p {
  margin-top: 5px;
}
.alert-dismissable,
.alert-dismissible {
  padding-right: 35px;
}
.alert-dismissable .close,
.alert-dismissible .close {
  position: relative;
  top: -2px;
  right: -21px;
  color: inherit;
}
.alert-success {
  background-color: #dff0d8;
  border-color: #d6e9c6;
  color: #3c763d;
}
.alert-success hr {
  border-top-color: #c9e2b3;
}
.alert-success .alert-link {
  color: #2b542c;
}
.alert-info {
  background-color: #d9edf7;
  border-color: #bce8f1;
  color: #31708f;
}
.alert-info hr {
  border-top-color: #a6e1ec;
}
.alert-info .alert-link {
  color: #245269;
}
.alert-warning {
  background-color: #fcf8e3;
  border-color: #faebcc;
  color: #8a6d3b;
}
.alert-warning hr {
  border-top-color: #f7e1b5;
}
.alert-warning .alert-link {
  color: #66512c;
}
.alert-danger {
  background-color: #f2dede;
  border-color: #ebccd1;
  color: #a94442;
}
.alert-danger hr {
  border-top-color: #e4b9c0;
}
.alert-danger .alert-link {
  color: #843534;
}
@-webkit-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
@keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
.progress {
  overflow: hidden;
  height: 18px;
  margin-bottom: 18px;
  background-color: #f5f5f5;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar {
  float: left;
  width: 0%;
  height: 100%;
  font-size: 12px;
  line-height: 18px;
  color: #fff;
  text-align: center;
  background-color: #337ab7;
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  -webkit-transition: width 0.6s ease;
  -o-transition: width 0.6s ease;
  transition: width 0.6s ease;
}
.progress-striped .progress-bar,
.progress-bar-striped {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-size: 40px 40px;
}
.progress.active .progress-bar,
.progress-bar.active {
  -webkit-animation: progress-bar-stripes 2s linear infinite;
  -o-animation: progress-bar-stripes 2s linear infinite;
  animation: progress-bar-stripes 2s linear infinite;
}
.progress-bar-success {
  background-color: #5cb85c;
}
.progress-striped .progress-bar-success {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-info {
  background-color: #5bc0de;
}
.progress-striped .progress-bar-info {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-warning {
  background-color: #f0ad4e;
}
.progress-striped .progress-bar-warning {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-danger {
  background-color: #d9534f;
}
.progress-striped .progress-bar-danger {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.media {
  margin-top: 15px;
}
.media:first-child {
  margin-top: 0;
}
.media,
.media-body {
  zoom: 1;
  overflow: hidden;
}
.media-body {
  width: 10000px;
}
.media-object {
  display: block;
}
.media-object.img-thumbnail {
  max-width: none;
}
.media-right,
.media > .pull-right {
  padding-left: 10px;
}
.media-left,
.media > .pull-left {
  padding-right: 10px;
}
.media-left,
.media-right,
.media-body {
  display: table-cell;
  vertical-align: top;
}
.media-middle {
  vertical-align: middle;
}
.media-bottom {
  vertical-align: bottom;
}
.media-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.media-list {
  padding-left: 0;
  list-style: none;
}
.list-group {
  margin-bottom: 20px;
  padding-left: 0;
}
.list-group-item {
  position: relative;
  display: block;
  padding: 10px 15px;
  margin-bottom: -1px;
  background-color: #fff;
  border: 1px solid #ddd;
}
.list-group-item:first-child {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
}
.list-group-item:last-child {
  margin-bottom: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
a.list-group-item,
button.list-group-item {
  color: #555;
}
a.list-group-item .list-group-item-heading,
button.list-group-item .list-group-item-heading {
  color: #333;
}
a.list-group-item:hover,
button.list-group-item:hover,
a.list-group-item:focus,
button.list-group-item:focus {
  text-decoration: none;
  color: #555;
  background-color: #f5f5f5;
}
button.list-group-item {
  width: 100%;
  text-align: left;
}
.list-group-item.disabled,
.list-group-item.disabled:hover,
.list-group-item.disabled:focus {
  background-color: #eeeeee;
  color: #777777;
  cursor: not-allowed;
}
.list-group-item.disabled .list-group-item-heading,
.list-group-item.disabled:hover .list-group-item-heading,
.list-group-item.disabled:focus .list-group-item-heading {
  color: inherit;
}
.list-group-item.disabled .list-group-item-text,
.list-group-item.disabled:hover .list-group-item-text,
.list-group-item.disabled:focus .list-group-item-text {
  color: #777777;
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
  z-index: 2;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.list-group-item.active .list-group-item-heading,
.list-group-item.active:hover .list-group-item-heading,
.list-group-item.active:focus .list-group-item-heading,
.list-group-item.active .list-group-item-heading > small,
.list-group-item.active:hover .list-group-item-heading > small,
.list-group-item.active:focus .list-group-item-heading > small,
.list-group-item.active .list-group-item-heading > .small,
.list-group-item.active:hover .list-group-item-heading > .small,
.list-group-item.active:focus .list-group-item-heading > .small {
  color: inherit;
}
.list-group-item.active .list-group-item-text,
.list-group-item.active:hover .list-group-item-text,
.list-group-item.active:focus .list-group-item-text {
  color: #c7ddef;
}
.list-group-item-success {
  color: #3c763d;
  background-color: #dff0d8;
}
a.list-group-item-success,
button.list-group-item-success {
  color: #3c763d;
}
a.list-group-item-success .list-group-item-heading,
button.list-group-item-success .list-group-item-heading {
  color: inherit;
}
a.list-group-item-success:hover,
button.list-group-item-success:hover,
a.list-group-item-success:focus,
button.list-group-item-success:focus {
  color: #3c763d;
  background-color: #d0e9c6;
}
a.list-group-item-success.active,
button.list-group-item-success.active,
a.list-group-item-success.active:hover,
button.list-group-item-success.active:hover,
a.list-group-item-success.active:focus,
button.list-group-item-success.active:focus {
  color: #fff;
  background-color: #3c763d;
  border-color: #3c763d;
}
.list-group-item-info {
  color: #31708f;
  background-color: #d9edf7;
}
a.list-group-item-info,
button.list-group-item-info {
  color: #31708f;
}
a.list-group-item-info .list-group-item-heading,
button.list-group-item-info .list-group-item-heading {
  color: inherit;
}
a.list-group-item-info:hover,
button.list-group-item-info:hover,
a.list-group-item-info:focus,
button.list-group-item-info:focus {
  color: #31708f;
  background-color: #c4e3f3;
}
a.list-group-item-info.active,
button.list-group-item-info.active,
a.list-group-item-info.active:hover,
button.list-group-item-info.active:hover,
a.list-group-item-info.active:focus,
button.list-group-item-info.active:focus {
  color: #fff;
  background-color: #31708f;
  border-color: #31708f;
}
.list-group-item-warning {
  color: #8a6d3b;
  background-color: #fcf8e3;
}
a.list-group-item-warning,
button.list-group-item-warning {
  color: #8a6d3b;
}
a.list-group-item-warning .list-group-item-heading,
button.list-group-item-warning .list-group-item-heading {
  color: inherit;
}
a.list-group-item-warning:hover,
button.list-group-item-warning:hover,
a.list-group-item-warning:focus,
button.list-group-item-warning:focus {
  color: #8a6d3b;
  background-color: #faf2cc;
}
a.list-group-item-warning.active,
button.list-group-item-warning.active,
a.list-group-item-warning.active:hover,
button.list-group-item-warning.active:hover,
a.list-group-item-warning.active:focus,
button.list-group-item-warning.active:focus {
  color: #fff;
  background-color: #8a6d3b;
  border-color: #8a6d3b;
}
.list-group-item-danger {
  color: #a94442;
  background-color: #f2dede;
}
a.list-group-item-danger,
button.list-group-item-danger {
  color: #a94442;
}
a.list-group-item-danger .list-group-item-heading,
button.list-group-item-danger .list-group-item-heading {
  color: inherit;
}
a.list-group-item-danger:hover,
button.list-group-item-danger:hover,
a.list-group-item-danger:focus,
button.list-group-item-danger:focus {
  color: #a94442;
  background-color: #ebcccc;
}
a.list-group-item-danger.active,
button.list-group-item-danger.active,
a.list-group-item-danger.active:hover,
button.list-group-item-danger.active:hover,
a.list-group-item-danger.active:focus,
button.list-group-item-danger.active:focus {
  color: #fff;
  background-color: #a94442;
  border-color: #a94442;
}
.list-group-item-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.list-group-item-text {
  margin-bottom: 0;
  line-height: 1.3;
}
.panel {
  margin-bottom: 18px;
  background-color: #fff;
  border: 1px solid transparent;
  border-radius: 2px;
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
.panel-body {
  padding: 15px;
}
.panel-heading {
  padding: 10px 15px;
  border-bottom: 1px solid transparent;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel-heading > .dropdown .dropdown-toggle {
  color: inherit;
}
.panel-title {
  margin-top: 0;
  margin-bottom: 0;
  font-size: 15px;
  color: inherit;
}
.panel-title > a,
.panel-title > small,
.panel-title > .small,
.panel-title > small > a,
.panel-title > .small > a {
  color: inherit;
}
.panel-footer {
  padding: 10px 15px;
  background-color: #f5f5f5;
  border-top: 1px solid #ddd;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .list-group,
.panel > .panel-collapse > .list-group {
  margin-bottom: 0;
}
.panel > .list-group .list-group-item,
.panel > .panel-collapse > .list-group .list-group-item {
  border-width: 1px 0;
  border-radius: 0;
}
.panel > .list-group:first-child .list-group-item:first-child,
.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
  border-top: 0;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel > .list-group:last-child .list-group-item:last-child,
.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
  border-bottom: 0;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.panel-heading + .list-group .list-group-item:first-child {
  border-top-width: 0;
}
.list-group + .panel-footer {
  border-top-width: 0;
}
.panel > .table,
.panel > .table-responsive > .table,
.panel > .panel-collapse > .table {
  margin-bottom: 0;
}
.panel > .table caption,
.panel > .table-responsive > .table caption,
.panel > .panel-collapse > .table caption {
  padding-left: 15px;
  padding-right: 15px;
}
.panel > .table:first-child,
.panel > .table-responsive:first-child > .table:first-child {
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
  border-top-left-radius: 1px;
  border-top-right-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
  border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
  border-top-right-radius: 1px;
}
.panel > .table:last-child,
.panel > .table-responsive:last-child > .table:last-child {
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
  border-bottom-left-radius: 1px;
  border-bottom-right-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
  border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
  border-bottom-right-radius: 1px;
}
.panel > .panel-body + .table,
.panel > .panel-body + .table-responsive,
.panel > .table + .panel-body,
.panel > .table-responsive + .panel-body {
  border-top: 1px solid #ddd;
}
.panel > .table > tbody:first-child > tr:first-child th,
.panel > .table > tbody:first-child > tr:first-child td {
  border-top: 0;
}
.panel > .table-bordered,
.panel > .table-responsive > .table-bordered {
  border: 0;
}
.panel > .table-bordered > thead > tr > th:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
.panel > .table-bordered > tbody > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
.panel > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-bordered > thead > tr > td:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
.panel > .table-bordered > tbody > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
.panel > .table-bordered > tfoot > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
  border-left: 0;
}
.panel > .table-bordered > thead > tr > th:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
.panel > .table-bordered > tbody > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
.panel > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-bordered > thead > tr > td:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
.panel > .table-bordered > tbody > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
.panel > .table-bordered > tfoot > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
  border-right: 0;
}
.panel > .table-bordered > thead > tr:first-child > td,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
.panel > .table-bordered > tbody > tr:first-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
.panel > .table-bordered > thead > tr:first-child > th,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
.panel > .table-bordered > tbody > tr:first-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
  border-bottom: 0;
}
.panel > .table-bordered > tbody > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
.panel > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-bordered > tbody > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
.panel > .table-bordered > tfoot > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
  border-bottom: 0;
}
.panel > .table-responsive {
  border: 0;
  margin-bottom: 0;
}
.panel-group {
  margin-bottom: 18px;
}
.panel-group .panel {
  margin-bottom: 0;
  border-radius: 2px;
}
.panel-group .panel + .panel {
  margin-top: 5px;
}
.panel-group .panel-heading {
  border-bottom: 0;
}
.panel-group .panel-heading + .panel-collapse > .panel-body,
.panel-group .panel-heading + .panel-collapse > .list-group {
  border-top: 1px solid #ddd;
}
.panel-group .panel-footer {
  border-top: 0;
}
.panel-group .panel-footer + .panel-collapse .panel-body {
  border-bottom: 1px solid #ddd;
}
.panel-default {
  border-color: #ddd;
}
.panel-default > .panel-heading {
  color: #333333;
  background-color: #f5f5f5;
  border-color: #ddd;
}
.panel-default > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ddd;
}
.panel-default > .panel-heading .badge {
  color: #f5f5f5;
  background-color: #333333;
}
.panel-default > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ddd;
}
.panel-primary {
  border-color: #337ab7;
}
.panel-primary > .panel-heading {
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.panel-primary > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #337ab7;
}
.panel-primary > .panel-heading .badge {
  color: #337ab7;
  background-color: #fff;
}
.panel-primary > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #337ab7;
}
.panel-success {
  border-color: #d6e9c6;
}
.panel-success > .panel-heading {
  color: #3c763d;
  background-color: #dff0d8;
  border-color: #d6e9c6;
}
.panel-success > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #d6e9c6;
}
.panel-success > .panel-heading .badge {
  color: #dff0d8;
  background-color: #3c763d;
}
.panel-success > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #d6e9c6;
}
.panel-info {
  border-color: #bce8f1;
}
.panel-info > .panel-heading {
  color: #31708f;
  background-color: #d9edf7;
  border-color: #bce8f1;
}
.panel-info > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #bce8f1;
}
.panel-info > .panel-heading .badge {
  color: #d9edf7;
  background-color: #31708f;
}
.panel-info > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #bce8f1;
}
.panel-warning {
  border-color: #faebcc;
}
.panel-warning > .panel-heading {
  color: #8a6d3b;
  background-color: #fcf8e3;
  border-color: #faebcc;
}
.panel-warning > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #faebcc;
}
.panel-warning > .panel-heading .badge {
  color: #fcf8e3;
  background-color: #8a6d3b;
}
.panel-warning > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #faebcc;
}
.panel-danger {
  border-color: #ebccd1;
}
.panel-danger > .panel-heading {
  color: #a94442;
  background-color: #f2dede;
  border-color: #ebccd1;
}
.panel-danger > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ebccd1;
}
.panel-danger > .panel-heading .badge {
  color: #f2dede;
  background-color: #a94442;
}
.panel-danger > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ebccd1;
}
.embed-responsive {
  position: relative;
  display: block;
  height: 0;
  padding: 0;
  overflow: hidden;
}
.embed-responsive .embed-responsive-item,
.embed-responsive iframe,
.embed-responsive embed,
.embed-responsive object,
.embed-responsive video {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  height: 100%;
  width: 100%;
  border: 0;
}
.embed-responsive-16by9 {
  padding-bottom: 56.25%;
}
.embed-responsive-4by3 {
  padding-bottom: 75%;
}
.well {
  min-height: 20px;
  padding: 19px;
  margin-bottom: 20px;
  background-color: #f5f5f5;
  border: 1px solid #e3e3e3;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
.well blockquote {
  border-color: #ddd;
  border-color: rgba(0, 0, 0, 0.15);
}
.well-lg {
  padding: 24px;
  border-radius: 3px;
}
.well-sm {
  padding: 9px;
  border-radius: 1px;
}
.close {
  float: right;
  font-size: 19.5px;
  font-weight: bold;
  line-height: 1;
  color: #000;
  text-shadow: 0 1px 0 #fff;
  opacity: 0.2;
  filter: alpha(opacity=20);
}
.close:hover,
.close:focus {
  color: #000;
  text-decoration: none;
  cursor: pointer;
  opacity: 0.5;
  filter: alpha(opacity=50);
}
button.close {
  padding: 0;
  cursor: pointer;
  background: transparent;
  border: 0;
  -webkit-appearance: none;
}
.modal-open {
  overflow: hidden;
}
.modal {
  display: none;
  overflow: hidden;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1050;
  -webkit-overflow-scrolling: touch;
  outline: 0;
}
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, -25%);
  -ms-transform: translate(0, -25%);
  -o-transform: translate(0, -25%);
  transform: translate(0, -25%);
  -webkit-transition: -webkit-transform 0.3s ease-out;
  -moz-transition: -moz-transform 0.3s ease-out;
  -o-transition: -o-transform 0.3s ease-out;
  transition: transform 0.3s ease-out;
}
.modal.in .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
.modal-open .modal {
  overflow-x: hidden;
  overflow-y: auto;
}
.modal-dialog {
  position: relative;
  width: auto;
  margin: 10px;
}
.modal-content {
  position: relative;
  background-color: #fff;
  border: 1px solid #999;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  background-clip: padding-box;
  outline: 0;
}
.modal-backdrop {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1040;
  background-color: #000;
}
.modal-backdrop.fade {
  opacity: 0;
  filter: alpha(opacity=0);
}
.modal-backdrop.in {
  opacity: 0.5;
  filter: alpha(opacity=50);
}
.modal-header {
  padding: 15px;
  border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
  margin-top: -2px;
}
.modal-title {
  margin: 0;
  line-height: 1.42857143;
}
.modal-body {
  position: relative;
  padding: 15px;
}
.modal-footer {
  padding: 15px;
  text-align: right;
  border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
  margin-left: 5px;
  margin-bottom: 0;
}
.modal-footer .btn-group .btn + .btn {
  margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
  margin-left: 0;
}
.modal-scrollbar-measure {
  position: absolute;
  top: -9999px;
  width: 50px;
  height: 50px;
  overflow: scroll;
}
@media (min-width: 768px) {
  .modal-dialog {
    width: 600px;
    margin: 30px auto;
  }
  .modal-content {
    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
  }
  .modal-sm {
    width: 300px;
  }
}
@media (min-width: 992px) {
  .modal-lg {
    width: 900px;
  }
}
.tooltip {
  position: absolute;
  z-index: 1070;
  display: block;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 12px;
  opacity: 0;
  filter: alpha(opacity=0);
}
.tooltip.in {
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.tooltip.top {
  margin-top: -3px;
  padding: 5px 0;
}
.tooltip.right {
  margin-left: 3px;
  padding: 0 5px;
}
.tooltip.bottom {
  margin-top: 3px;
  padding: 5px 0;
}
.tooltip.left {
  margin-left: -3px;
  padding: 0 5px;
}
.tooltip-inner {
  max-width: 200px;
  padding: 3px 8px;
  color: #fff;
  text-align: center;
  background-color: #000;
  border-radius: 2px;
}
.tooltip-arrow {
  position: absolute;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.tooltip.top .tooltip-arrow {
  bottom: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-left .tooltip-arrow {
  bottom: 0;
  right: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-right .tooltip-arrow {
  bottom: 0;
  left: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.right .tooltip-arrow {
  top: 50%;
  left: 0;
  margin-top: -5px;
  border-width: 5px 5px 5px 0;
  border-right-color: #000;
}
.tooltip.left .tooltip-arrow {
  top: 50%;
  right: 0;
  margin-top: -5px;
  border-width: 5px 0 5px 5px;
  border-left-color: #000;
}
.tooltip.bottom .tooltip-arrow {
  top: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-left .tooltip-arrow {
  top: 0;
  right: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-right .tooltip-arrow {
  top: 0;
  left: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.popover {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1060;
  display: none;
  max-width: 276px;
  padding: 1px;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 13px;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}
.popover.top {
  margin-top: -10px;
}
.popover.right {
  margin-left: 10px;
}
.popover.bottom {
  margin-top: 10px;
}
.popover.left {
  margin-left: -10px;
}
.popover-title {
  margin: 0;
  padding: 8px 14px;
  font-size: 13px;
  background-color: #f7f7f7;
  border-bottom: 1px solid #ebebeb;
  border-radius: 2px 2px 0 0;
}
.popover-content {
  padding: 9px 14px;
}
.popover > .arrow,
.popover > .arrow:after {
  position: absolute;
  display: block;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.popover > .arrow {
  border-width: 11px;
}
.popover > .arrow:after {
  border-width: 10px;
  content: "";
}
.popover.top > .arrow {
  left: 50%;
  margin-left: -11px;
  border-bottom-width: 0;
  border-top-color: #999999;
  border-top-color: rgba(0, 0, 0, 0.25);
  bottom: -11px;
}
.popover.top > .arrow:after {
  content: " ";
  bottom: 1px;
  margin-left: -10px;
  border-bottom-width: 0;
  border-top-color: #fff;
}
.popover.right > .arrow {
  top: 50%;
  left: -11px;
  margin-top: -11px;
  border-left-width: 0;
  border-right-color: #999999;
  border-right-color: rgba(0, 0, 0, 0.25);
}
.popover.right > .arrow:after {
  content: " ";
  left: 1px;
  bottom: -10px;
  border-left-width: 0;
  border-right-color: #fff;
}
.popover.bottom > .arrow {
  left: 50%;
  margin-left: -11px;
  border-top-width: 0;
  border-bottom-color: #999999;
  border-bottom-color: rgba(0, 0, 0, 0.25);
  top: -11px;
}
.popover.bottom > .arrow:after {
  content: " ";
  top: 1px;
  margin-left: -10px;
  border-top-width: 0;
  border-bottom-color: #fff;
}
.popover.left > .arrow {
  top: 50%;
  right: -11px;
  margin-top: -11px;
  border-right-width: 0;
  border-left-color: #999999;
  border-left-color: rgba(0, 0, 0, 0.25);
}
.popover.left > .arrow:after {
  content: " ";
  right: 1px;
  border-right-width: 0;
  border-left-color: #fff;
  bottom: -10px;
}
.carousel {
  position: relative;
}
.carousel-inner {
  position: relative;
  overflow: hidden;
  width: 100%;
}
.carousel-inner > .item {
  display: none;
  position: relative;
  -webkit-transition: 0.6s ease-in-out left;
  -o-transition: 0.6s ease-in-out left;
  transition: 0.6s ease-in-out left;
}
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  line-height: 1;
}
@media all and (transform-3d), (-webkit-transform-3d) {
  .carousel-inner > .item {
    -webkit-transition: -webkit-transform 0.6s ease-in-out;
    -moz-transition: -moz-transform 0.6s ease-in-out;
    -o-transition: -o-transform 0.6s ease-in-out;
    transition: transform 0.6s ease-in-out;
    -webkit-backface-visibility: hidden;
    -moz-backface-visibility: hidden;
    backface-visibility: hidden;
    -webkit-perspective: 1000px;
    -moz-perspective: 1000px;
    perspective: 1000px;
  }
  .carousel-inner > .item.next,
  .carousel-inner > .item.active.right {
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.prev,
  .carousel-inner > .item.active.left {
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.next.left,
  .carousel-inner > .item.prev.right,
  .carousel-inner > .item.active {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    left: 0;
  }
}
.carousel-inner > .active,
.carousel-inner > .next,
.carousel-inner > .prev {
  display: block;
}
.carousel-inner > .active {
  left: 0;
}
.carousel-inner > .next,
.carousel-inner > .prev {
  position: absolute;
  top: 0;
  width: 100%;
}
.carousel-inner > .next {
  left: 100%;
}
.carousel-inner > .prev {
  left: -100%;
}
.carousel-inner > .next.left,
.carousel-inner > .prev.right {
  left: 0;
}
.carousel-inner > .active.left {
  left: -100%;
}
.carousel-inner > .active.right {
  left: 100%;
}
.carousel-control {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  width: 15%;
  opacity: 0.5;
  filter: alpha(opacity=50);
  font-size: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
  background-color: rgba(0, 0, 0, 0);
}
.carousel-control.left {
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
}
.carousel-control.right {
  left: auto;
  right: 0;
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
}
.carousel-control:hover,
.carousel-control:focus {
  outline: 0;
  color: #fff;
  text-decoration: none;
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.carousel-control .icon-prev,
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right {
  position: absolute;
  top: 50%;
  margin-top: -10px;
  z-index: 5;
  display: inline-block;
}
.carousel-control .icon-prev,
.carousel-control .glyphicon-chevron-left {
  left: 50%;
  margin-left: -10px;
}
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-right {
  right: 50%;
  margin-right: -10px;
}
.carousel-control .icon-prev,
.carousel-control .icon-next {
  width: 20px;
  height: 20px;
  line-height: 1;
  font-family: serif;
}
.carousel-control .icon-prev:before {
  content: '\2039';
}
.carousel-control .icon-next:before {
  content: '\203a';
}
.carousel-indicators {
  position: absolute;
  bottom: 10px;
  left: 50%;
  z-index: 15;
  width: 60%;
  margin-left: -30%;
  padding-left: 0;
  list-style: none;
  text-align: center;
}
.carousel-indicators li {
  display: inline-block;
  width: 10px;
  height: 10px;
  margin: 1px;
  text-indent: -999px;
  border: 1px solid #fff;
  border-radius: 10px;
  cursor: pointer;
  background-color: #000 \9;
  background-color: rgba(0, 0, 0, 0);
}
.carousel-indicators .active {
  margin: 0;
  width: 12px;
  height: 12px;
  background-color: #fff;
}
.carousel-caption {
  position: absolute;
  left: 15%;
  right: 15%;
  bottom: 20px;
  z-index: 10;
  padding-top: 20px;
  padding-bottom: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
}
.carousel-caption .btn {
  text-shadow: none;
}
@media screen and (min-width: 768px) {
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-prev,
  .carousel-control .icon-next {
    width: 30px;
    height: 30px;
    margin-top: -10px;
    font-size: 30px;
  }
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .icon-prev {
    margin-left: -10px;
  }
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-next {
    margin-right: -10px;
  }
  .carousel-caption {
    left: 20%;
    right: 20%;
    padding-bottom: 30px;
  }
  .carousel-indicators {
    bottom: 20px;
  }
}
.clearfix:before,
.clearfix:after,
.dl-horizontal dd:before,
.dl-horizontal dd:after,
.container:before,
.container:after,
.container-fluid:before,
.container-fluid:after,
.row:before,
.row:after,
.form-horizontal .form-group:before,
.form-horizontal .form-group:after,
.btn-toolbar:before,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:before,
.btn-group-vertical > .btn-group:after,
.nav:before,
.nav:after,
.navbar:before,
.navbar:after,
.navbar-header:before,
.navbar-header:after,
.navbar-collapse:before,
.navbar-collapse:after,
.pager:before,
.pager:after,
.panel-body:before,
.panel-body:after,
.modal-header:before,
.modal-header:after,
.modal-footer:before,
.modal-footer:after,
.item_buttons:before,
.item_buttons:after {
  content: " ";
  display: table;
}
.clearfix:after,
.dl-horizontal dd:after,
.container:after,
.container-fluid:after,
.row:after,
.form-horizontal .form-group:after,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:after,
.nav:after,
.navbar:after,
.navbar-header:after,
.navbar-collapse:after,
.pager:after,
.panel-body:after,
.modal-header:after,
.modal-footer:after,
.item_buttons:after {
  clear: both;
}
.center-block {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.pull-right {
  float: right !important;
}
.pull-left {
  float: left !important;
}
.hide {
  display: none !important;
}
.show {
  display: block !important;
}
.invisible {
  visibility: hidden;
}
.text-hide {
  font: 0/0 a;
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
}
.hidden {
  display: none !important;
}
.affix {
  position: fixed;
}
@-ms-viewport {
  width: device-width;
}
.visible-xs,
.visible-sm,
.visible-md,
.visible-lg {
  display: none !important;
}
.visible-xs-block,
.visible-xs-inline,
.visible-xs-inline-block,
.visible-sm-block,
.visible-sm-inline,
.visible-sm-inline-block,
.visible-md-block,
.visible-md-inline,
.visible-md-inline-block,
.visible-lg-block,
.visible-lg-inline,
.visible-lg-inline-block {
  display: none !important;
}
@media (max-width: 767px) {
  .visible-xs {
    display: block !important;
  }
  table.visible-xs {
    display: table !important;
  }
  tr.visible-xs {
    display: table-row !important;
  }
  th.visible-xs,
  td.visible-xs {
    display: table-cell !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-block {
    display: block !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline {
    display: inline !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm {
    display: block !important;
  }
  table.visible-sm {
    display: table !important;
  }
  tr.visible-sm {
    display: table-row !important;
  }
  th.visible-sm,
  td.visible-sm {
    display: table-cell !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-block {
    display: block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline {
    display: inline !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md {
    display: block !important;
  }
  table.visible-md {
    display: table !important;
  }
  tr.visible-md {
    display: table-row !important;
  }
  th.visible-md,
  td.visible-md {
    display: table-cell !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-block {
    display: block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline {
    display: inline !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg {
    display: block !important;
  }
  table.visible-lg {
    display: table !important;
  }
  tr.visible-lg {
    display: table-row !important;
  }
  th.visible-lg,
  td.visible-lg {
    display: table-cell !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-block {
    display: block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline {
    display: inline !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline-block {
    display: inline-block !important;
  }
}
@media (max-width: 767px) {
  .hidden-xs {
    display: none !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .hidden-sm {
    display: none !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .hidden-md {
    display: none !important;
  }
}
@media (min-width: 1200px) {
  .hidden-lg {
    display: none !important;
  }
}
.visible-print {
  display: none !important;
}
@media print {
  .visible-print {
    display: block !important;
  }
  table.visible-print {
    display: table !important;
  }
  tr.visible-print {
    display: table-row !important;
  }
  th.visible-print,
  td.visible-print {
    display: table-cell !important;
  }
}
.visible-print-block {
  display: none !important;
}
@media print {
  .visible-print-block {
    display: block !important;
  }
}
.visible-print-inline {
  display: none !important;
}
@media print {
  .visible-print-inline {
    display: inline !important;
  }
}
.visible-print-inline-block {
  display: none !important;
}
@media print {
  .visible-print-inline-block {
    display: inline-block !important;
  }
}
@media print {
  .hidden-print {
    display: none !important;
  }
}
/*!
*
* Font Awesome
*
*/
/*!
 *  Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
 */
/* FONT PATH
 * -------------------------- */
@font-face {
  font-family: 'FontAwesome';
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0');
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
  font-weight: normal;
  font-style: normal;
}
.fa {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
/* makes the font 33% larger relative to the icon container */
.fa-lg {
  font-size: 1.33333333em;
  line-height: 0.75em;
  vertical-align: -15%;
}
.fa-2x {
  font-size: 2em;
}
.fa-3x {
  font-size: 3em;
}
.fa-4x {
  font-size: 4em;
}
.fa-5x {
  font-size: 5em;
}
.fa-fw {
  width: 1.28571429em;
  text-align: center;
}
.fa-ul {
  padding-left: 0;
  margin-left: 2.14285714em;
  list-style-type: none;
}
.fa-ul > li {
  position: relative;
}
.fa-li {
  position: absolute;
  left: -2.14285714em;
  width: 2.14285714em;
  top: 0.14285714em;
  text-align: center;
}
.fa-li.fa-lg {
  left: -1.85714286em;
}
.fa-border {
  padding: .2em .25em .15em;
  border: solid 0.08em #eee;
  border-radius: .1em;
}
.pull-right {
  float: right;
}
.pull-left {
  float: left;
}
.fa.pull-left {
  margin-right: .3em;
}
.fa.pull-right {
  margin-left: .3em;
}
.fa-spin {
  -webkit-animation: fa-spin 2s infinite linear;
  animation: fa-spin 2s infinite linear;
}
@-webkit-keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
@keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
.fa-rotate-90 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
  -webkit-transform: rotate(90deg);
  -ms-transform: rotate(90deg);
  transform: rotate(90deg);
}
.fa-rotate-180 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
  -webkit-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  transform: rotate(180deg);
}
.fa-rotate-270 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
  -webkit-transform: rotate(270deg);
  -ms-transform: rotate(270deg);
  transform: rotate(270deg);
}
.fa-flip-horizontal {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
  -webkit-transform: scale(-1, 1);
  -ms-transform: scale(-1, 1);
  transform: scale(-1, 1);
}
.fa-flip-vertical {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
  -webkit-transform: scale(1, -1);
  -ms-transform: scale(1, -1);
  transform: scale(1, -1);
}
:root .fa-rotate-90,
:root .fa-rotate-180,
:root .fa-rotate-270,
:root .fa-flip-horizontal,
:root .fa-flip-vertical {
  filter: none;
}
.fa-stack {
  position: relative;
  display: inline-block;
  width: 2em;
  height: 2em;
  line-height: 2em;
  vertical-align: middle;
}
.fa-stack-1x,
.fa-stack-2x {
  position: absolute;
  left: 0;
  width: 100%;
  text-align: center;
}
.fa-stack-1x {
  line-height: inherit;
}
.fa-stack-2x {
  font-size: 2em;
}
.fa-inverse {
  color: #fff;
}
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
   readers do not read off random characters that represent icons */
.fa-glass:before {
  content: "\f000";
}
.fa-music:before {
  content: "\f001";
}
.fa-search:before {
  content: "\f002";
}
.fa-envelope-o:before {
  content: "\f003";
}
.fa-heart:before {
  content: "\f004";
}
.fa-star:before {
  content: "\f005";
}
.fa-star-o:before {
  content: "\f006";
}
.fa-user:before {
  content: "\f007";
}
.fa-film:before {
  content: "\f008";
}
.fa-th-large:before {
  content: "\f009";
}
.fa-th:before {
  content: "\f00a";
}
.fa-th-list:before {
  content: "\f00b";
}
.fa-check:before {
  content: "\f00c";
}
.fa-remove:before,
.fa-close:before,
.fa-times:before {
  content: "\f00d";
}
.fa-search-plus:before {
  content: "\f00e";
}
.fa-search-minus:before {
  content: "\f010";
}
.fa-power-off:before {
  content: "\f011";
}
.fa-signal:before {
  content: "\f012";
}
.fa-gear:before,
.fa-cog:before {
  content: "\f013";
}
.fa-trash-o:before {
  content: "\f014";
}
.fa-home:before {
  content: "\f015";
}
.fa-file-o:before {
  content: "\f016";
}
.fa-clock-o:before {
  content: "\f017";
}
.fa-road:before {
  content: "\f018";
}
.fa-download:before {
  content: "\f019";
}
.fa-arrow-circle-o-down:before {
  content: "\f01a";
}
.fa-arrow-circle-o-up:before {
  content: "\f01b";
}
.fa-inbox:before {
  content: "\f01c";
}
.fa-play-circle-o:before {
  content: "\f01d";
}
.fa-rotate-right:before,
.fa-repeat:before {
  content: "\f01e";
}
.fa-refresh:before {
  content: "\f021";
}
.fa-list-alt:before {
  content: "\f022";
}
.fa-lock:before {
  content: "\f023";
}
.fa-flag:before {
  content: "\f024";
}
.fa-headphones:before {
  content: "\f025";
}
.fa-volume-off:before {
  content: "\f026";
}
.fa-volume-down:before {
  content: "\f027";
}
.fa-volume-up:before {
  content: "\f028";
}
.fa-qrcode:before {
  content: "\f029";
}
.fa-barcode:before {
  content: "\f02a";
}
.fa-tag:before {
  content: "\f02b";
}
.fa-tags:before {
  content: "\f02c";
}
.fa-book:before {
  content: "\f02d";
}
.fa-bookmark:before {
  content: "\f02e";
}
.fa-print:before {
  content: "\f02f";
}
.fa-camera:before {
  content: "\f030";
}
.fa-font:before {
  content: "\f031";
}
.fa-bold:before {
  content: "\f032";
}
.fa-italic:before {
  content: "\f033";
}
.fa-text-height:before {
  content: "\f034";
}
.fa-text-width:before {
  content: "\f035";
}
.fa-align-left:before {
  content: "\f036";
}
.fa-align-center:before {
  content: "\f037";
}
.fa-align-right:before {
  content: "\f038";
}
.fa-align-justify:before {
  content: "\f039";
}
.fa-list:before {
  content: "\f03a";
}
.fa-dedent:before,
.fa-outdent:before {
  content: "\f03b";
}
.fa-indent:before {
  content: "\f03c";
}
.fa-video-camera:before {
  content: "\f03d";
}
.fa-photo:before,
.fa-image:before,
.fa-picture-o:before {
  content: "\f03e";
}
.fa-pencil:before {
  content: "\f040";
}
.fa-map-marker:before {
  content: "\f041";
}
.fa-adjust:before {
  content: "\f042";
}
.fa-tint:before {
  content: "\f043";
}
.fa-edit:before,
.fa-pencil-square-o:before {
  content: "\f044";
}
.fa-share-square-o:before {
  content: "\f045";
}
.fa-check-square-o:before {
  content: "\f046";
}
.fa-arrows:before {
  content: "\f047";
}
.fa-step-backward:before {
  content: "\f048";
}
.fa-fast-backward:before {
  content: "\f049";
}
.fa-backward:before {
  content: "\f04a";
}
.fa-play:before {
  content: "\f04b";
}
.fa-pause:before {
  content: "\f04c";
}
.fa-stop:before {
  content: "\f04d";
}
.fa-forward:before {
  content: "\f04e";
}
.fa-fast-forward:before {
  content: "\f050";
}
.fa-step-forward:before {
  content: "\f051";
}
.fa-eject:before {
  content: "\f052";
}
.fa-chevron-left:before {
  content: "\f053";
}
.fa-chevron-right:before {
  content: "\f054";
}
.fa-plus-circle:before {
  content: "\f055";
}
.fa-minus-circle:before {
  content: "\f056";
}
.fa-times-circle:before {
  content: "\f057";
}
.fa-check-circle:before {
  content: "\f058";
}
.fa-question-circle:before {
  content: "\f059";
}
.fa-info-circle:before {
  content: "\f05a";
}
.fa-crosshairs:before {
  content: "\f05b";
}
.fa-times-circle-o:before {
  content: "\f05c";
}
.fa-check-circle-o:before {
  content: "\f05d";
}
.fa-ban:before {
  content: "\f05e";
}
.fa-arrow-left:before {
  content: "\f060";
}
.fa-arrow-right:before {
  content: "\f061";
}
.fa-arrow-up:before {
  content: "\f062";
}
.fa-arrow-down:before {
  content: "\f063";
}
.fa-mail-forward:before,
.fa-share:before {
  content: "\f064";
}
.fa-expand:before {
  content: "\f065";
}
.fa-compress:before {
  content: "\f066";
}
.fa-plus:before {
  content: "\f067";
}
.fa-minus:before {
  content: "\f068";
}
.fa-asterisk:before {
  content: "\f069";
}
.fa-exclamation-circle:before {
  content: "\f06a";
}
.fa-gift:before {
  content: "\f06b";
}
.fa-leaf:before {
  content: "\f06c";
}
.fa-fire:before {
  content: "\f06d";
}
.fa-eye:before {
  content: "\f06e";
}
.fa-eye-slash:before {
  content: "\f070";
}
.fa-warning:before,
.fa-exclamation-triangle:before {
  content: "\f071";
}
.fa-plane:before {
  content: "\f072";
}
.fa-calendar:before {
  content: "\f073";
}
.fa-random:before {
  content: "\f074";
}
.fa-comment:before {
  content: "\f075";
}
.fa-magnet:before {
  content: "\f076";
}
.fa-chevron-up:before {
  content: "\f077";
}
.fa-chevron-down:before {
  content: "\f078";
}
.fa-retweet:before {
  content: "\f079";
}
.fa-shopping-cart:before {
  content: "\f07a";
}
.fa-folder:before {
  content: "\f07b";
}
.fa-folder-open:before {
  content: "\f07c";
}
.fa-arrows-v:before {
  content: "\f07d";
}
.fa-arrows-h:before {
  content: "\f07e";
}
.fa-bar-chart-o:before,
.fa-bar-chart:before {
  content: "\f080";
}
.fa-twitter-square:before {
  content: "\f081";
}
.fa-facebook-square:before {
  content: "\f082";
}
.fa-camera-retro:before {
  content: "\f083";
}
.fa-key:before {
  content: "\f084";
}
.fa-gears:before,
.fa-cogs:before {
  content: "\f085";
}
.fa-comments:before {
  content: "\f086";
}
.fa-thumbs-o-up:before {
  content: "\f087";
}
.fa-thumbs-o-down:before {
  content: "\f088";
}
.fa-star-half:before {
  content: "\f089";
}
.fa-heart-o:before {
  content: "\f08a";
}
.fa-sign-out:before {
  content: "\f08b";
}
.fa-linkedin-square:before {
  content: "\f08c";
}
.fa-thumb-tack:before {
  content: "\f08d";
}
.fa-external-link:before {
  content: "\f08e";
}
.fa-sign-in:before {
  content: "\f090";
}
.fa-trophy:before {
  content: "\f091";
}
.fa-github-square:before {
  content: "\f092";
}
.fa-upload:before {
  content: "\f093";
}
.fa-lemon-o:before {
  content: "\f094";
}
.fa-phone:before {
  content: "\f095";
}
.fa-square-o:before {
  content: "\f096";
}
.fa-bookmark-o:before {
  content: "\f097";
}
.fa-phone-square:before {
  content: "\f098";
}
.fa-twitter:before {
  content: "\f099";
}
.fa-facebook:before {
  content: "\f09a";
}
.fa-github:before {
  content: "\f09b";
}
.fa-unlock:before {
  content: "\f09c";
}
.fa-credit-card:before {
  content: "\f09d";
}
.fa-rss:before {
  content: "\f09e";
}
.fa-hdd-o:before {
  content: "\f0a0";
}
.fa-bullhorn:before {
  content: "\f0a1";
}
.fa-bell:before {
  content: "\f0f3";
}
.fa-certificate:before {
  content: "\f0a3";
}
.fa-hand-o-right:before {
  content: "\f0a4";
}
.fa-hand-o-left:before {
  content: "\f0a5";
}
.fa-hand-o-up:before {
  content: "\f0a6";
}
.fa-hand-o-down:before {
  content: "\f0a7";
}
.fa-arrow-circle-left:before {
  content: "\f0a8";
}
.fa-arrow-circle-right:before {
  content: "\f0a9";
}
.fa-arrow-circle-up:before {
  content: "\f0aa";
}
.fa-arrow-circle-down:before {
  content: "\f0ab";
}
.fa-globe:before {
  content: "\f0ac";
}
.fa-wrench:before {
  content: "\f0ad";
}
.fa-tasks:before {
  content: "\f0ae";
}
.fa-filter:before {
  content: "\f0b0";
}
.fa-briefcase:before {
  content: "\f0b1";
}
.fa-arrows-alt:before {
  content: "\f0b2";
}
.fa-group:before,
.fa-users:before {
  content: "\f0c0";
}
.fa-chain:before,
.fa-link:before {
  content: "\f0c1";
}
.fa-cloud:before {
  content: "\f0c2";
}
.fa-flask:before {
  content: "\f0c3";
}
.fa-cut:before,
.fa-scissors:before {
  content: "\f0c4";
}
.fa-copy:before,
.fa-files-o:before {
  content: "\f0c5";
}
.fa-paperclip:before {
  content: "\f0c6";
}
.fa-save:before,
.fa-floppy-o:before {
  content: "\f0c7";
}
.fa-square:before {
  content: "\f0c8";
}
.fa-navicon:before,
.fa-reorder:before,
.fa-bars:before {
  content: "\f0c9";
}
.fa-list-ul:before {
  content: "\f0ca";
}
.fa-list-ol:before {
  content: "\f0cb";
}
.fa-strikethrough:before {
  content: "\f0cc";
}
.fa-underline:before {
  content: "\f0cd";
}
.fa-table:before {
  content: "\f0ce";
}
.fa-magic:before {
  content: "\f0d0";
}
.fa-truck:before {
  content: "\f0d1";
}
.fa-pinterest:before {
  content: "\f0d2";
}
.fa-pinterest-square:before {
  content: "\f0d3";
}
.fa-google-plus-square:before {
  content: "\f0d4";
}
.fa-google-plus:before {
  content: "\f0d5";
}
.fa-money:before {
  content: "\f0d6";
}
.fa-caret-down:before {
  content: "\f0d7";
}
.fa-caret-up:before {
  content: "\f0d8";
}
.fa-caret-left:before {
  content: "\f0d9";
}
.fa-caret-right:before {
  content: "\f0da";
}
.fa-columns:before {
  content: "\f0db";
}
.fa-unsorted:before,
.fa-sort:before {
  content: "\f0dc";
}
.fa-sort-down:before,
.fa-sort-desc:before {
  content: "\f0dd";
}
.fa-sort-up:before,
.fa-sort-asc:before {
  content: "\f0de";
}
.fa-envelope:before {
  content: "\f0e0";
}
.fa-linkedin:before {
  content: "\f0e1";
}
.fa-rotate-left:before,
.fa-undo:before {
  content: "\f0e2";
}
.fa-legal:before,
.fa-gavel:before {
  content: "\f0e3";
}
.fa-dashboard:before,
.fa-tachometer:before {
  content: "\f0e4";
}
.fa-comment-o:before {
  content: "\f0e5";
}
.fa-comments-o:before {
  content: "\f0e6";
}
.fa-flash:before,
.fa-bolt:before {
  content: "\f0e7";
}
.fa-sitemap:before {
  content: "\f0e8";
}
.fa-umbrella:before {
  content: "\f0e9";
}
.fa-paste:before,
.fa-clipboard:before {
  content: "\f0ea";
}
.fa-lightbulb-o:before {
  content: "\f0eb";
}
.fa-exchange:before {
  content: "\f0ec";
}
.fa-cloud-download:before {
  content: "\f0ed";
}
.fa-cloud-upload:before {
  content: "\f0ee";
}
.fa-user-md:before {
  content: "\f0f0";
}
.fa-stethoscope:before {
  content: "\f0f1";
}
.fa-suitcase:before {
  content: "\f0f2";
}
.fa-bell-o:before {
  content: "\f0a2";
}
.fa-coffee:before {
  content: "\f0f4";
}
.fa-cutlery:before {
  content: "\f0f5";
}
.fa-file-text-o:before {
  content: "\f0f6";
}
.fa-building-o:before {
  content: "\f0f7";
}
.fa-hospital-o:before {
  content: "\f0f8";
}
.fa-ambulance:before {
  content: "\f0f9";
}
.fa-medkit:before {
  content: "\f0fa";
}
.fa-fighter-jet:before {
  content: "\f0fb";
}
.fa-beer:before {
  content: "\f0fc";
}
.fa-h-square:before {
  content: "\f0fd";
}
.fa-plus-square:before {
  content: "\f0fe";
}
.fa-angle-double-left:before {
  content: "\f100";
}
.fa-angle-double-right:before {
  content: "\f101";
}
.fa-angle-double-up:before {
  content: "\f102";
}
.fa-angle-double-down:before {
  content: "\f103";
}
.fa-angle-left:before {
  content: "\f104";
}
.fa-angle-right:before {
  content: "\f105";
}
.fa-angle-up:before {
  content: "\f106";
}
.fa-angle-down:before {
  content: "\f107";
}
.fa-desktop:before {
  content: "\f108";
}
.fa-laptop:before {
  content: "\f109";
}
.fa-tablet:before {
  content: "\f10a";
}
.fa-mobile-phone:before,
.fa-mobile:before {
  content: "\f10b";
}
.fa-circle-o:before {
  content: "\f10c";
}
.fa-quote-left:before {
  content: "\f10d";
}
.fa-quote-right:before {
  content: "\f10e";
}
.fa-spinner:before {
  content: "\f110";
}
.fa-circle:before {
  content: "\f111";
}
.fa-mail-reply:before,
.fa-reply:before {
  content: "\f112";
}
.fa-github-alt:before {
  content: "\f113";
}
.fa-folder-o:before {
  content: "\f114";
}
.fa-folder-open-o:before {
  content: "\f115";
}
.fa-smile-o:before {
  content: "\f118";
}
.fa-frown-o:before {
  content: "\f119";
}
.fa-meh-o:before {
  content: "\f11a";
}
.fa-gamepad:before {
  content: "\f11b";
}
.fa-keyboard-o:before {
  content: "\f11c";
}
.fa-flag-o:before {
  content: "\f11d";
}
.fa-flag-checkered:before {
  content: "\f11e";
}
.fa-terminal:before {
  content: "\f120";
}
.fa-code:before {
  content: "\f121";
}
.fa-mail-reply-all:before,
.fa-reply-all:before {
  content: "\f122";
}
.fa-star-half-empty:before,
.fa-star-half-full:before,
.fa-star-half-o:before {
  content: "\f123";
}
.fa-location-arrow:before {
  content: "\f124";
}
.fa-crop:before {
  content: "\f125";
}
.fa-code-fork:before {
  content: "\f126";
}
.fa-unlink:before,
.fa-chain-broken:before {
  content: "\f127";
}
.fa-question:before {
  content: "\f128";
}
.fa-info:before {
  content: "\f129";
}
.fa-exclamation:before {
  content: "\f12a";
}
.fa-superscript:before {
  content: "\f12b";
}
.fa-subscript:before {
  content: "\f12c";
}
.fa-eraser:before {
  content: "\f12d";
}
.fa-puzzle-piece:before {
  content: "\f12e";
}
.fa-microphone:before {
  content: "\f130";
}
.fa-microphone-slash:before {
  content: "\f131";
}
.fa-shield:before {
  content: "\f132";
}
.fa-calendar-o:before {
  content: "\f133";
}
.fa-fire-extinguisher:before {
  content: "\f134";
}
.fa-rocket:before {
  content: "\f135";
}
.fa-maxcdn:before {
  content: "\f136";
}
.fa-chevron-circle-left:before {
  content: "\f137";
}
.fa-chevron-circle-right:before {
  content: "\f138";
}
.fa-chevron-circle-up:before {
  content: "\f139";
}
.fa-chevron-circle-down:before {
  content: "\f13a";
}
.fa-html5:before {
  content: "\f13b";
}
.fa-css3:before {
  content: "\f13c";
}
.fa-anchor:before {
  content: "\f13d";
}
.fa-unlock-alt:before {
  content: "\f13e";
}
.fa-bullseye:before {
  content: "\f140";
}
.fa-ellipsis-h:before {
  content: "\f141";
}
.fa-ellipsis-v:before {
  content: "\f142";
}
.fa-rss-square:before {
  content: "\f143";
}
.fa-play-circle:before {
  content: "\f144";
}
.fa-ticket:before {
  content: "\f145";
}
.fa-minus-square:before {
  content: "\f146";
}
.fa-minus-square-o:before {
  content: "\f147";
}
.fa-level-up:before {
  content: "\f148";
}
.fa-level-down:before {
  content: "\f149";
}
.fa-check-square:before {
  content: "\f14a";
}
.fa-pencil-square:before {
  content: "\f14b";
}
.fa-external-link-square:before {
  content: "\f14c";
}
.fa-share-square:before {
  content: "\f14d";
}
.fa-compass:before {
  content: "\f14e";
}
.fa-toggle-down:before,
.fa-caret-square-o-down:before {
  content: "\f150";
}
.fa-toggle-up:before,
.fa-caret-square-o-up:before {
  content: "\f151";
}
.fa-toggle-right:before,
.fa-caret-square-o-right:before {
  content: "\f152";
}
.fa-euro:before,
.fa-eur:before {
  content: "\f153";
}
.fa-gbp:before {
  content: "\f154";
}
.fa-dollar:before,
.fa-usd:before {
  content: "\f155";
}
.fa-rupee:before,
.fa-inr:before {
  content: "\f156";
}
.fa-cny:before,
.fa-rmb:before,
.fa-yen:before,
.fa-jpy:before {
  content: "\f157";
}
.fa-ruble:before,
.fa-rouble:before,
.fa-rub:before {
  content: "\f158";
}
.fa-won:before,
.fa-krw:before {
  content: "\f159";
}
.fa-bitcoin:before,
.fa-btc:before {
  content: "\f15a";
}
.fa-file:before {
  content: "\f15b";
}
.fa-file-text:before {
  content: "\f15c";
}
.fa-sort-alpha-asc:before {
  content: "\f15d";
}
.fa-sort-alpha-desc:before {
  content: "\f15e";
}
.fa-sort-amount-asc:before {
  content: "\f160";
}
.fa-sort-amount-desc:before {
  content: "\f161";
}
.fa-sort-numeric-asc:before {
  content: "\f162";
}
.fa-sort-numeric-desc:before {
  content: "\f163";
}
.fa-thumbs-up:before {
  content: "\f164";
}
.fa-thumbs-down:before {
  content: "\f165";
}
.fa-youtube-square:before {
  content: "\f166";
}
.fa-youtube:before {
  content: "\f167";
}
.fa-xing:before {
  content: "\f168";
}
.fa-xing-square:before {
  content: "\f169";
}
.fa-youtube-play:before {
  content: "\f16a";
}
.fa-dropbox:before {
  content: "\f16b";
}
.fa-stack-overflow:before {
  content: "\f16c";
}
.fa-instagram:before {
  content: "\f16d";
}
.fa-flickr:before {
  content: "\f16e";
}
.fa-adn:before {
  content: "\f170";
}
.fa-bitbucket:before {
  content: "\f171";
}
.fa-bitbucket-square:before {
  content: "\f172";
}
.fa-tumblr:before {
  content: "\f173";
}
.fa-tumblr-square:before {
  content: "\f174";
}
.fa-long-arrow-down:before {
  content: "\f175";
}
.fa-long-arrow-up:before {
  content: "\f176";
}
.fa-long-arrow-left:before {
  content: "\f177";
}
.fa-long-arrow-right:before {
  content: "\f178";
}
.fa-apple:before {
  content: "\f179";
}
.fa-windows:before {
  content: "\f17a";
}
.fa-android:before {
  content: "\f17b";
}
.fa-linux:before {
  content: "\f17c";
}
.fa-dribbble:before {
  content: "\f17d";
}
.fa-skype:before {
  content: "\f17e";
}
.fa-foursquare:before {
  content: "\f180";
}
.fa-trello:before {
  content: "\f181";
}
.fa-female:before {
  content: "\f182";
}
.fa-male:before {
  content: "\f183";
}
.fa-gittip:before {
  content: "\f184";
}
.fa-sun-o:before {
  content: "\f185";
}
.fa-moon-o:before {
  content: "\f186";
}
.fa-archive:before {
  content: "\f187";
}
.fa-bug:before {
  content: "\f188";
}
.fa-vk:before {
  content: "\f189";
}
.fa-weibo:before {
  content: "\f18a";
}
.fa-renren:before {
  content: "\f18b";
}
.fa-pagelines:before {
  content: "\f18c";
}
.fa-stack-exchange:before {
  content: "\f18d";
}
.fa-arrow-circle-o-right:before {
  content: "\f18e";
}
.fa-arrow-circle-o-left:before {
  content: "\f190";
}
.fa-toggle-left:before,
.fa-caret-square-o-left:before {
  content: "\f191";
}
.fa-dot-circle-o:before {
  content: "\f192";
}
.fa-wheelchair:before {
  content: "\f193";
}
.fa-vimeo-square:before {
  content: "\f194";
}
.fa-turkish-lira:before,
.fa-try:before {
  content: "\f195";
}
.fa-plus-square-o:before {
  content: "\f196";
}
.fa-space-shuttle:before {
  content: "\f197";
}
.fa-slack:before {
  content: "\f198";
}
.fa-envelope-square:before {
  content: "\f199";
}
.fa-wordpress:before {
  content: "\f19a";
}
.fa-openid:before {
  content: "\f19b";
}
.fa-institution:before,
.fa-bank:before,
.fa-university:before {
  content: "\f19c";
}
.fa-mortar-board:before,
.fa-graduation-cap:before {
  content: "\f19d";
}
.fa-yahoo:before {
  content: "\f19e";
}
.fa-google:before {
  content: "\f1a0";
}
.fa-reddit:before {
  content: "\f1a1";
}
.fa-reddit-square:before {
  content: "\f1a2";
}
.fa-stumbleupon-circle:before {
  content: "\f1a3";
}
.fa-stumbleupon:before {
  content: "\f1a4";
}
.fa-delicious:before {
  content: "\f1a5";
}
.fa-digg:before {
  content: "\f1a6";
}
.fa-pied-piper:before {
  content: "\f1a7";
}
.fa-pied-piper-alt:before {
  content: "\f1a8";
}
.fa-drupal:before {
  content: "\f1a9";
}
.fa-joomla:before {
  content: "\f1aa";
}
.fa-language:before {
  content: "\f1ab";
}
.fa-fax:before {
  content: "\f1ac";
}
.fa-building:before {
  content: "\f1ad";
}
.fa-child:before {
  content: "\f1ae";
}
.fa-paw:before {
  content: "\f1b0";
}
.fa-spoon:before {
  content: "\f1b1";
}
.fa-cube:before {
  content: "\f1b2";
}
.fa-cubes:before {
  content: "\f1b3";
}
.fa-behance:before {
  content: "\f1b4";
}
.fa-behance-square:before {
  content: "\f1b5";
}
.fa-steam:before {
  content: "\f1b6";
}
.fa-steam-square:before {
  content: "\f1b7";
}
.fa-recycle:before {
  content: "\f1b8";
}
.fa-automobile:before,
.fa-car:before {
  content: "\f1b9";
}
.fa-cab:before,
.fa-taxi:before {
  content: "\f1ba";
}
.fa-tree:before {
  content: "\f1bb";
}
.fa-spotify:before {
  content: "\f1bc";
}
.fa-deviantart:before {
  content: "\f1bd";
}
.fa-soundcloud:before {
  content: "\f1be";
}
.fa-database:before {
  content: "\f1c0";
}
.fa-file-pdf-o:before {
  content: "\f1c1";
}
.fa-file-word-o:before {
  content: "\f1c2";
}
.fa-file-excel-o:before {
  content: "\f1c3";
}
.fa-file-powerpoint-o:before {
  content: "\f1c4";
}
.fa-file-photo-o:before,
.fa-file-picture-o:before,
.fa-file-image-o:before {
  content: "\f1c5";
}
.fa-file-zip-o:before,
.fa-file-archive-o:before {
  content: "\f1c6";
}
.fa-file-sound-o:before,
.fa-file-audio-o:before {
  content: "\f1c7";
}
.fa-file-movie-o:before,
.fa-file-video-o:before {
  content: "\f1c8";
}
.fa-file-code-o:before {
  content: "\f1c9";
}
.fa-vine:before {
  content: "\f1ca";
}
.fa-codepen:before {
  content: "\f1cb";
}
.fa-jsfiddle:before {
  content: "\f1cc";
}
.fa-life-bouy:before,
.fa-life-buoy:before,
.fa-life-saver:before,
.fa-support:before,
.fa-life-ring:before {
  content: "\f1cd";
}
.fa-circle-o-notch:before {
  content: "\f1ce";
}
.fa-ra:before,
.fa-rebel:before {
  content: "\f1d0";
}
.fa-ge:before,
.fa-empire:before {
  content: "\f1d1";
}
.fa-git-square:before {
  content: "\f1d2";
}
.fa-git:before {
  content: "\f1d3";
}
.fa-hacker-news:before {
  content: "\f1d4";
}
.fa-tencent-weibo:before {
  content: "\f1d5";
}
.fa-qq:before {
  content: "\f1d6";
}
.fa-wechat:before,
.fa-weixin:before {
  content: "\f1d7";
}
.fa-send:before,
.fa-paper-plane:before {
  content: "\f1d8";
}
.fa-send-o:before,
.fa-paper-plane-o:before {
  content: "\f1d9";
}
.fa-history:before {
  content: "\f1da";
}
.fa-circle-thin:before {
  content: "\f1db";
}
.fa-header:before {
  content: "\f1dc";
}
.fa-paragraph:before {
  content: "\f1dd";
}
.fa-sliders:before {
  content: "\f1de";
}
.fa-share-alt:before {
  content: "\f1e0";
}
.fa-share-alt-square:before {
  content: "\f1e1";
}
.fa-bomb:before {
  content: "\f1e2";
}
.fa-soccer-ball-o:before,
.fa-futbol-o:before {
  content: "\f1e3";
}
.fa-tty:before {
  content: "\f1e4";
}
.fa-binoculars:before {
  content: "\f1e5";
}
.fa-plug:before {
  content: "\f1e6";
}
.fa-slideshare:before {
  content: "\f1e7";
}
.fa-twitch:before {
  content: "\f1e8";
}
.fa-yelp:before {
  content: "\f1e9";
}
.fa-newspaper-o:before {
  content: "\f1ea";
}
.fa-wifi:before {
  content: "\f1eb";
}
.fa-calculator:before {
  content: "\f1ec";
}
.fa-paypal:before {
  content: "\f1ed";
}
.fa-google-wallet:before {
  content: "\f1ee";
}
.fa-cc-visa:before {
  content: "\f1f0";
}
.fa-cc-mastercard:before {
  content: "\f1f1";
}
.fa-cc-discover:before {
  content: "\f1f2";
}
.fa-cc-amex:before {
  content: "\f1f3";
}
.fa-cc-paypal:before {
  content: "\f1f4";
}
.fa-cc-stripe:before {
  content: "\f1f5";
}
.fa-bell-slash:before {
  content: "\f1f6";
}
.fa-bell-slash-o:before {
  content: "\f1f7";
}
.fa-trash:before {
  content: "\f1f8";
}
.fa-copyright:before {
  content: "\f1f9";
}
.fa-at:before {
  content: "\f1fa";
}
.fa-eyedropper:before {
  content: "\f1fb";
}
.fa-paint-brush:before {
  content: "\f1fc";
}
.fa-birthday-cake:before {
  content: "\f1fd";
}
.fa-area-chart:before {
  content: "\f1fe";
}
.fa-pie-chart:before {
  content: "\f200";
}
.fa-line-chart:before {
  content: "\f201";
}
.fa-lastfm:before {
  content: "\f202";
}
.fa-lastfm-square:before {
  content: "\f203";
}
.fa-toggle-off:before {
  content: "\f204";
}
.fa-toggle-on:before {
  content: "\f205";
}
.fa-bicycle:before {
  content: "\f206";
}
.fa-bus:before {
  content: "\f207";
}
.fa-ioxhost:before {
  content: "\f208";
}
.fa-angellist:before {
  content: "\f209";
}
.fa-cc:before {
  content: "\f20a";
}
.fa-shekel:before,
.fa-sheqel:before,
.fa-ils:before {
  content: "\f20b";
}
.fa-meanpath:before {
  content: "\f20c";
}
/*!
*
* IPython base
*
*/
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
code {
  color: #000;
}
pre {
  font-size: inherit;
  line-height: inherit;
}
label {
  font-weight: normal;
}
/* Make the page background atleast 100% the height of the view port */
/* Make the page itself atleast 70% the height of the view port */
.border-box-sizing {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.corner-all {
  border-radius: 2px;
}
.no-padding {
  padding: 0px;
}
/* Flexible box model classes */
/* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
/* This file is a compatability layer.  It allows the usage of flexible box 
model layouts accross multiple browsers, including older browsers.  The newest,
universal implementation of the flexible box model is used when available (see
`Modern browsers` comments below).  Browsers that are known to implement this 
new spec completely include:

    Firefox 28.0+
    Chrome 29.0+
    Internet Explorer 11+ 
    Opera 17.0+

Browsers not listed, including Safari, are supported via the styling under the
`Old browsers` comments below.
*/
.hbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
.hbox > * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.vbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
.vbox > * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.hbox.reverse,
.vbox.reverse,
.reverse {
  /* Old browsers */
  -webkit-box-direction: reverse;
  -moz-box-direction: reverse;
  box-direction: reverse;
  /* Modern browsers */
  flex-direction: row-reverse;
}
.hbox.box-flex0,
.vbox.box-flex0,
.box-flex0 {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
  width: auto;
}
.hbox.box-flex1,
.vbox.box-flex1,
.box-flex1 {
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex,
.vbox.box-flex,
.box-flex {
  /* Old browsers */
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex2,
.vbox.box-flex2,
.box-flex2 {
  /* Old browsers */
  -webkit-box-flex: 2;
  -moz-box-flex: 2;
  box-flex: 2;
  /* Modern browsers */
  flex: 2;
}
.box-group1 {
  /*  Deprecated */
  -webkit-box-flex-group: 1;
  -moz-box-flex-group: 1;
  box-flex-group: 1;
}
.box-group2 {
  /* Deprecated */
  -webkit-box-flex-group: 2;
  -moz-box-flex-group: 2;
  box-flex-group: 2;
}
.hbox.start,
.vbox.start,
.start {
  /* Old browsers */
  -webkit-box-pack: start;
  -moz-box-pack: start;
  box-pack: start;
  /* Modern browsers */
  justify-content: flex-start;
}
.hbox.end,
.vbox.end,
.end {
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
}
.hbox.center,
.vbox.center,
.center {
  /* Old browsers */
  -webkit-box-pack: center;
  -moz-box-pack: center;
  box-pack: center;
  /* Modern browsers */
  justify-content: center;
}
.hbox.baseline,
.vbox.baseline,
.baseline {
  /* Old browsers */
  -webkit-box-pack: baseline;
  -moz-box-pack: baseline;
  box-pack: baseline;
  /* Modern browsers */
  justify-content: baseline;
}
.hbox.stretch,
.vbox.stretch,
.stretch {
  /* Old browsers */
  -webkit-box-pack: stretch;
  -moz-box-pack: stretch;
  box-pack: stretch;
  /* Modern browsers */
  justify-content: stretch;
}
.hbox.align-start,
.vbox.align-start,
.align-start {
  /* Old browsers */
  -webkit-box-align: start;
  -moz-box-align: start;
  box-align: start;
  /* Modern browsers */
  align-items: flex-start;
}
.hbox.align-end,
.vbox.align-end,
.align-end {
  /* Old browsers */
  -webkit-box-align: end;
  -moz-box-align: end;
  box-align: end;
  /* Modern browsers */
  align-items: flex-end;
}
.hbox.align-center,
.vbox.align-center,
.align-center {
  /* Old browsers */
  -webkit-box-align: center;
  -moz-box-align: center;
  box-align: center;
  /* Modern browsers */
  align-items: center;
}
.hbox.align-baseline,
.vbox.align-baseline,
.align-baseline {
  /* Old browsers */
  -webkit-box-align: baseline;
  -moz-box-align: baseline;
  box-align: baseline;
  /* Modern browsers */
  align-items: baseline;
}
.hbox.align-stretch,
.vbox.align-stretch,
.align-stretch {
  /* Old browsers */
  -webkit-box-align: stretch;
  -moz-box-align: stretch;
  box-align: stretch;
  /* Modern browsers */
  align-items: stretch;
}
div.error {
  margin: 2em;
  text-align: center;
}
div.error > h1 {
  font-size: 500%;
  line-height: normal;
}
div.error > p {
  font-size: 200%;
  line-height: normal;
}
div.traceback-wrapper {
  text-align: left;
  max-width: 800px;
  margin: auto;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
body {
  background-color: #fff;
  /* This makes sure that the body covers the entire window and needs to
       be in a different element than the display: box in wrapper below */
  position: absolute;
  left: 0px;
  right: 0px;
  top: 0px;
  bottom: 0px;
  overflow: visible;
}
body > #header {
  /* Initially hidden to prevent FLOUC */
  display: none;
  background-color: #fff;
  /* Display over codemirror */
  position: relative;
  z-index: 100;
}
body > #header #header-container {
  padding-bottom: 5px;
  padding-top: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
body > #header .header-bar {
  width: 100%;
  height: 1px;
  background: #e7e7e7;
  margin-bottom: -1px;
}
@media print {
  body > #header {
    display: none !important;
  }
}
#header-spacer {
  width: 100%;
  visibility: hidden;
}
@media print {
  #header-spacer {
    display: none;
  }
}
#ipython_notebook {
  padding-left: 0px;
  padding-top: 1px;
  padding-bottom: 1px;
}
@media (max-width: 991px) {
  #ipython_notebook {
    margin-left: 10px;
  }
}
[dir="rtl"] #ipython_notebook {
  float: right !important;
}
#noscript {
  width: auto;
  padding-top: 16px;
  padding-bottom: 16px;
  text-align: center;
  font-size: 22px;
  color: red;
  font-weight: bold;
}
#ipython_notebook img {
  height: 28px;
}
#site {
  width: 100%;
  display: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  overflow: auto;
}
@media print {
  #site {
    height: auto !important;
  }
}
/* Smaller buttons */
.ui-button .ui-button-text {
  padding: 0.2em 0.8em;
  font-size: 77%;
}
input.ui-button {
  padding: 0.3em 0.9em;
}
span#login_widget {
  float: right;
}
span#login_widget > .button,
#logout {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget > .button:focus,
#logout:focus,
span#login_widget > .button.focus,
#logout.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
span#login_widget > .button:hover,
#logout:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget > .button:active:hover,
#logout:active:hover,
span#login_widget > .button.active:hover,
#logout.active:hover,
.open > .dropdown-togglespan#login_widget > .button:hover,
.open > .dropdown-toggle#logout:hover,
span#login_widget > .button:active:focus,
#logout:active:focus,
span#login_widget > .button.active:focus,
#logout.active:focus,
.open > .dropdown-togglespan#login_widget > .button:focus,
.open > .dropdown-toggle#logout:focus,
span#login_widget > .button:active.focus,
#logout:active.focus,
span#login_widget > .button.active.focus,
#logout.active.focus,
.open > .dropdown-togglespan#login_widget > .button.focus,
.open > .dropdown-toggle#logout.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
  background-image: none;
}
span#login_widget > .button.disabled:hover,
#logout.disabled:hover,
span#login_widget > .button[disabled]:hover,
#logout[disabled]:hover,
fieldset[disabled] span#login_widget > .button:hover,
fieldset[disabled] #logout:hover,
span#login_widget > .button.disabled:focus,
#logout.disabled:focus,
span#login_widget > .button[disabled]:focus,
#logout[disabled]:focus,
fieldset[disabled] span#login_widget > .button:focus,
fieldset[disabled] #logout:focus,
span#login_widget > .button.disabled.focus,
#logout.disabled.focus,
span#login_widget > .button[disabled].focus,
#logout[disabled].focus,
fieldset[disabled] span#login_widget > .button.focus,
fieldset[disabled] #logout.focus {
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget > .button .badge,
#logout .badge {
  color: #fff;
  background-color: #333;
}
.nav-header {
  text-transform: none;
}
#header > span {
  margin-top: 10px;
}
.modal_stretch .modal-dialog {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  min-height: 80vh;
}
.modal_stretch .modal-dialog .modal-body {
  max-height: calc(100vh - 200px);
  overflow: auto;
  flex: 1;
}
@media (min-width: 768px) {
  .modal .modal-dialog {
    width: 700px;
  }
}
@media (min-width: 768px) {
  select.form-control {
    margin-left: 12px;
    margin-right: 12px;
  }
}
/*!
*
* IPython auth
*
*/
.center-nav {
  display: inline-block;
  margin-bottom: -4px;
}
/*!
*
* IPython tree view
*
*/
/* We need an invisible input field on top of the sentense*/
/* "Drag file onto the list ..." */
.alternate_upload {
  background-color: none;
  display: inline;
}
.alternate_upload.form {
  padding: 0;
  margin: 0;
}
.alternate_upload input.fileinput {
  text-align: center;
  vertical-align: middle;
  display: inline;
  opacity: 0;
  z-index: 2;
  width: 12ex;
  margin-right: -12ex;
}
.alternate_upload .btn-upload {
  height: 22px;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
[dir="rtl"] #tabs li {
  float: right;
}
ul#tabs {
  margin-bottom: 4px;
}
[dir="rtl"] ul#tabs {
  margin-right: 0px;
}
ul#tabs a {
  padding-top: 6px;
  padding-bottom: 4px;
}
ul.breadcrumb a:focus,
ul.breadcrumb a:hover {
  text-decoration: none;
}
ul.breadcrumb i.icon-home {
  font-size: 16px;
  margin-right: 4px;
}
ul.breadcrumb span {
  color: #5e5e5e;
}
.list_toolbar {
  padding: 4px 0 4px 0;
  vertical-align: middle;
}
.list_toolbar .tree-buttons {
  padding-top: 1px;
}
[dir="rtl"] .list_toolbar .tree-buttons {
  float: left !important;
}
[dir="rtl"] .list_toolbar .pull-right {
  padding-top: 1px;
  float: left !important;
}
[dir="rtl"] .list_toolbar .pull-left {
  float: right !important;
}
.dynamic-buttons {
  padding-top: 3px;
  display: inline-block;
}
.list_toolbar [class*="span"] {
  min-height: 24px;
}
.list_header {
  font-weight: bold;
  background-color: #EEE;
}
.list_placeholder {
  font-weight: bold;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
}
.list_container {
  margin-top: 4px;
  margin-bottom: 20px;
  border: 1px solid #ddd;
  border-radius: 2px;
}
.list_container > div {
  border-bottom: 1px solid #ddd;
}
.list_container > div:hover .list-item {
  background-color: red;
}
.list_container > div:last-child {
  border: none;
}
.list_item:hover .list_item {
  background-color: #ddd;
}
.list_item a {
  text-decoration: none;
}
.list_item:hover {
  background-color: #fafafa;
}
.list_header > div,
.list_item > div {
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
.list_header > div input,
.list_item > div input {
  margin-right: 7px;
  margin-left: 14px;
  vertical-align: baseline;
  line-height: 22px;
  position: relative;
  top: -1px;
}
.list_header > div .item_link,
.list_item > div .item_link {
  margin-left: -1px;
  vertical-align: baseline;
  line-height: 22px;
}
.new-file input[type=checkbox] {
  visibility: hidden;
}
.item_name {
  line-height: 22px;
  height: 24px;
}
.item_icon {
  font-size: 14px;
  color: #5e5e5e;
  margin-right: 7px;
  margin-left: 7px;
  line-height: 22px;
  vertical-align: baseline;
}
.item_buttons {
  line-height: 1em;
  margin-left: -5px;
}
.item_buttons .btn,
.item_buttons .btn-group,
.item_buttons .input-group {
  float: left;
}
.item_buttons > .btn,
.item_buttons > .btn-group,
.item_buttons > .input-group {
  margin-left: 5px;
}
.item_buttons .btn {
  min-width: 13ex;
}
.item_buttons .running-indicator {
  padding-top: 4px;
  color: #5cb85c;
}
.item_buttons .kernel-name {
  padding-top: 4px;
  color: #5bc0de;
  margin-right: 7px;
  float: left;
}
.toolbar_info {
  height: 24px;
  line-height: 24px;
}
.list_item input:not([type=checkbox]) {
  padding-top: 3px;
  padding-bottom: 3px;
  height: 22px;
  line-height: 14px;
  margin: 0px;
}
.highlight_text {
  color: blue;
}
#project_name {
  display: inline-block;
  padding-left: 7px;
  margin-left: -2px;
}
#project_name > .breadcrumb {
  padding: 0px;
  margin-bottom: 0px;
  background-color: transparent;
  font-weight: bold;
}
#tree-selector {
  padding-right: 0px;
}
[dir="rtl"] #tree-selector a {
  float: right;
}
#button-select-all {
  min-width: 50px;
}
#select-all {
  margin-left: 7px;
  margin-right: 2px;
}
.menu_icon {
  margin-right: 2px;
}
.tab-content .row {
  margin-left: 0px;
  margin-right: 0px;
}
.folder_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f114";
}
.folder_icon:before.pull-left {
  margin-right: .3em;
}
.folder_icon:before.pull-right {
  margin-left: .3em;
}
.notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f02d";
  position: relative;
  top: -1px;
}
.notebook_icon:before.pull-left {
  margin-right: .3em;
}
.notebook_icon:before.pull-right {
  margin-left: .3em;
}
.running_notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f02d";
  position: relative;
  top: -1px;
  color: #5cb85c;
}
.running_notebook_icon:before.pull-left {
  margin-right: .3em;
}
.running_notebook_icon:before.pull-right {
  margin-left: .3em;
}
.file_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f016";
  position: relative;
  top: -2px;
}
.file_icon:before.pull-left {
  margin-right: .3em;
}
.file_icon:before.pull-right {
  margin-left: .3em;
}
#notebook_toolbar .pull-right {
  padding-top: 0px;
  margin-right: -1px;
}
ul#new-menu {
  left: auto;
  right: 0;
}
[dir="rtl"] #new-menu {
  text-align: right;
}
.kernel-menu-icon {
  padding-right: 12px;
  width: 24px;
  content: "\f096";
}
.kernel-menu-icon:before {
  content: "\f096";
}
.kernel-menu-icon-current:before {
  content: "\f00c";
}
#tab_content {
  padding-top: 20px;
}
#running .panel-group .panel {
  margin-top: 3px;
  margin-bottom: 1em;
}
#running .panel-group .panel .panel-heading {
  background-color: #EEE;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
#running .panel-group .panel .panel-heading a:focus,
#running .panel-group .panel .panel-heading a:hover {
  text-decoration: none;
}
#running .panel-group .panel .panel-body {
  padding: 0px;
}
#running .panel-group .panel .panel-body .list_container {
  margin-top: 0px;
  margin-bottom: 0px;
  border: 0px;
  border-radius: 0px;
}
#running .panel-group .panel .panel-body .list_container .list_item {
  border-bottom: 1px solid #ddd;
}
#running .panel-group .panel .panel-body .list_container .list_item:last-child {
  border-bottom: 0px;
}
[dir="rtl"] #running .col-sm-8 {
  float: right !important;
}
.delete-button {
  display: none;
}
.duplicate-button {
  display: none;
}
.rename-button {
  display: none;
}
.shutdown-button {
  display: none;
}
.dynamic-instructions {
  display: inline-block;
  padding-top: 4px;
}
/*!
*
* IPython text editor webapp
*
*/
.selected-keymap i.fa {
  padding: 0px 5px;
}
.selected-keymap i.fa:before {
  content: "\f00c";
}
#mode-menu {
  overflow: auto;
  max-height: 20em;
}
.edit_app #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.edit_app #menubar .navbar {
  /* Use a negative 1 bottom margin, so the border overlaps the border of the
    header */
  margin-bottom: -1px;
}
.dirty-indicator {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator.pull-left {
  margin-right: .3em;
}
.dirty-indicator.pull-right {
  margin-left: .3em;
}
.dirty-indicator-dirty {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-dirty.pull-left {
  margin-right: .3em;
}
.dirty-indicator-dirty.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-clean.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f00c";
}
.dirty-indicator-clean:before.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean:before.pull-right {
  margin-left: .3em;
}
#filename {
  font-size: 16pt;
  display: table;
  padding: 0px 5px;
}
#current-mode {
  padding-left: 5px;
  padding-right: 5px;
}
#texteditor-backdrop {
  padding-top: 20px;
  padding-bottom: 20px;
}
@media not print {
  #texteditor-backdrop {
    background-color: #EEE;
  }
}
@media print {
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container {
    padding: 0px;
    background-color: #fff;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI colors. */
.ansibold {
  font-weight: bold;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
  color: black;
}
.ansired {
  color: darkred;
}
.ansigreen {
  color: darkgreen;
}
.ansiyellow {
  color: #c4a000;
}
.ansiblue {
  color: darkblue;
}
.ansipurple {
  color: darkviolet;
}
.ansicyan {
  color: steelblue;
}
.ansigray {
  color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
  background-color: black;
}
.ansibgred {
  background-color: red;
}
.ansibggreen {
  background-color: green;
}
.ansibgyellow {
  background-color: yellow;
}
.ansibgblue {
  background-color: blue;
}
.ansibgpurple {
  background-color: magenta;
}
.ansibgcyan {
  background-color: cyan;
}
.ansibggray {
  background-color: gray;
}
div.cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  border-radius: 2px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  border-width: 1px;
  border-style: solid;
  border-color: transparent;
  width: 100%;
  padding: 5px;
  /* This acts as a spacer between cells, that is outside the border */
  margin: 0px;
  outline: none;
  border-left-width: 1px;
  padding-left: 5px;
  background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
}
div.cell.jupyter-soft-selected {
  border-left-color: #90CAF9;
  border-left-color: #E3F2FD;
  border-left-width: 1px;
  padding-left: 5px;
  border-right-color: #E3F2FD;
  border-right-width: 1px;
  background: #E3F2FD;
}
@media print {
  div.cell.jupyter-soft-selected {
    border-color: transparent;
  }
}
div.cell.selected {
  border-color: #ababab;
  border-left-width: 0px;
  padding-left: 6px;
  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
}
@media print {
  div.cell.selected {
    border-color: transparent;
  }
}
div.cell.selected.jupyter-soft-selected {
  border-left-width: 0;
  padding-left: 6px;
  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
}
.edit_mode div.cell.selected {
  border-color: #66BB6A;
  border-left-width: 0px;
  padding-left: 6px;
  background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
}
@media print {
  .edit_mode div.cell.selected {
    border-color: transparent;
  }
}
.prompt {
  /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
  min-width: 14ex;
  /* This padding is tuned to match the padding on the CodeMirror editor. */
  padding: 0.4em;
  margin: 0px;
  font-family: monospace;
  text-align: right;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
  /* Don't highlight prompt number selection */
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  /* Use default cursor */
  cursor: default;
}
@media (max-width: 540px) {
  .prompt {
    text-align: left;
  }
}
div.inner_cell {
  min-width: 0;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
  border: 1px solid #cfcfcf;
  border-radius: 2px;
  background: #f7f7f7;
  line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
   is no content in the output_subarea and the prompt. The main purpose of this is
   to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
  padding-top: 0;
  padding-bottom: 0;
}
div.unrecognized_cell {
  padding: 5px 5px 5px 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.unrecognized_cell .inner_cell {
  border-radius: 2px;
  padding: 5px;
  font-weight: bold;
  color: red;
  border: 1px solid #cfcfcf;
  background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
  color: inherit;
  text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
  color: inherit;
  text-decoration: none;
}
@media (max-width: 540px) {
  div.unrecognized_cell > div.prompt {
    display: none;
  }
}
div.code_cell {
  /* avoid page breaking on code cells when printing */
}
@media print {
  div.code_cell {
    page-break-inside: avoid;
  }
}
/* any special styling for code cells that are currently running goes here */
div.input {
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.input {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
  color: #303F9F;
  border-top: 1px solid transparent;
}
div.input_area > div.highlight {
  margin: 0.4em;
  border: none;
  padding: 0px;
  background-color: transparent;
}
div.input_area > div.highlight > pre {
  margin: 0px;
  border: none;
  padding: 0px;
  background-color: transparent;
}
/* The following gets added to the <head> if it is detected that the user has a
 * monospace font with inconsistent normal/bold/italic height.  See
 * notebookmain.js.  Such fonts will have keywords vertically offset with
 * respect to the rest of the text.  The user should select a better font.
 * See: https://github.com/ipython/ipython/issues/1503
 *
 * .CodeMirror span {
 *      vertical-align: bottom;
 * }
 */
.CodeMirror {
  line-height: 1.21429em;
  /* Changed from 1em to our global default */
  font-size: 14px;
  height: auto;
  /* Changed to auto to autogrow */
  background: none;
  /* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
  /*  The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
  /*  We have found that if it is visible, vertical scrollbars appear with font size changes.*/
  overflow-y: hidden;
  overflow-x: auto;
}
.CodeMirror-lines {
  /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
  /* we have set a different line-height and want this to scale with that. */
  padding: 0.4em;
}
.CodeMirror-linenumber {
  padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.CodeMirror pre {
  /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
  /* .CodeMirror-lines */
  padding: 0;
  border: 0;
  border-radius: 0;
}
/*

Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
Adapted from GitHub theme

*/
.highlight-base {
  color: #000;
}
.highlight-variable {
  color: #000;
}
.highlight-variable-2 {
  color: #1a1a1a;
}
.highlight-variable-3 {
  color: #333333;
}
.highlight-string {
  color: #BA2121;
}
.highlight-comment {
  color: #408080;
  font-style: italic;
}
.highlight-number {
  color: #080;
}
.highlight-atom {
  color: #88F;
}
.highlight-keyword {
  color: #008000;
  font-weight: bold;
}
.highlight-builtin {
  color: #008000;
}
.highlight-error {
  color: #f00;
}
.highlight-operator {
  color: #AA22FF;
  font-weight: bold;
}
.highlight-meta {
  color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
  color: #00f;
}
.highlight-string-2 {
  color: #f50;
}
.highlight-qualifier {
  color: #555;
}
.highlight-bracket {
  color: #997;
}
.highlight-tag {
  color: #170;
}
.highlight-attribute {
  color: #00c;
}
.highlight-header {
  color: blue;
}
.highlight-quote {
  color: #090;
}
.highlight-link {
  color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
  color: #008000;
  font-weight: bold;
}
.cm-s-ipython span.cm-atom {
  color: #88F;
}
.cm-s-ipython span.cm-number {
  color: #080;
}
.cm-s-ipython span.cm-def {
  color: #00f;
}
.cm-s-ipython span.cm-variable {
  color: #000;
}
.cm-s-ipython span.cm-operator {
  color: #AA22FF;
  font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
  color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
  color: #333333;
}
.cm-s-ipython span.cm-comment {
  color: #408080;
  font-style: italic;
}
.cm-s-ipython span.cm-string {
  color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
  color: #f50;
}
.cm-s-ipython span.cm-meta {
  color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
  color: #555;
}
.cm-s-ipython span.cm-builtin {
  color: #008000;
}
.cm-s-ipython span.cm-bracket {
  color: #997;
}
.cm-s-ipython span.cm-tag {
  color: #170;
}
.cm-s-ipython span.cm-attribute {
  color: #00c;
}
.cm-s-ipython span.cm-header {
  color: blue;
}
.cm-s-ipython span.cm-quote {
  color: #090;
}
.cm-s-ipython span.cm-link {
  color: #00c;
}
.cm-s-ipython span.cm-error {
  color: #f00;
}
.cm-s-ipython span.cm-tab {
  background: url();
  background-position: right;
  background-repeat: no-repeat;
}
div.output_wrapper {
  /* this position must be relative to enable descendents to be absolute within it */
  position: relative;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
  /* ideally, this would be max-height, but FF barfs all over that */
  height: 24em;
  /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
  width: 100%;
  overflow: auto;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
  margin: 0px;
  padding: 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
div.out_prompt_overlay {
  height: 100%;
  padding: 0px 0.4em;
  position: absolute;
  border-radius: 2px;
}
div.out_prompt_overlay:hover {
  /* use inner shadow to get border that is computed the same on WebKit/FF */
  -webkit-box-shadow: inset 0 0 1px #000;
  box-shadow: inset 0 0 1px #000;
  background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
  color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
  padding: 0px;
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.output_area .MathJax_Display {
  text-align: left !important;
}
div.output_area .rendered_html table {
  margin-left: 0;
  margin-right: 0;
}
div.output_area .rendered_html img {
  margin-left: 0;
  margin-right: 0;
}
div.output_area img,
div.output_area svg {
  max-width: 100%;
  height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
  max-width: none;
}
/* This is needed to protect the pre formating from global settings such
   as that of bootstrap */
.output {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.output_area {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
div.output_area pre {
  margin: 0;
  padding: 0;
  border: 0;
  vertical-align: baseline;
  color: black;
  background-color: transparent;
  border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
   the prompt div. */
div.output_subarea {
  overflow-x: auto;
  padding: 0.4em;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
  max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
  overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
   output types */
/* all text output has this class: */
div.output_text {
  text-align: left;
  color: #000;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
  background: #fdd;
  /* very light red background for stderr */
}
div.output_latex {
  text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
  padding: 0;
}
.js-error {
  color: darkred;
}
/* raw_input styles */
div.raw_input_container {
  line-height: 1.21429em;
  padding-top: 5px;
}
pre.raw_input_prompt {
  /* nothing needed here. */
}
input.raw_input {
  font-family: monospace;
  font-size: inherit;
  color: inherit;
  width: auto;
  /* make sure input baseline aligns with prompt */
  vertical-align: baseline;
  /* padding + margin = 0.5em between prompt and cursor */
  padding: 0em 0.25em;
  margin: 0em 0.25em;
}
input.raw_input:focus {
  box-shadow: none;
}
p.p-space {
  margin-bottom: 10px;
}
div.output_unrecognized {
  padding: 5px;
  font-weight: bold;
  color: red;
}
div.output_unrecognized a {
  color: inherit;
  text-decoration: none;
}
div.output_unrecognized a:hover {
  color: inherit;
  text-decoration: none;
}
.rendered_html {
  color: #000;
  /* any extras will just be numbers: */
}
.rendered_html em {
  font-style: italic;
}
.rendered_html strong {
  font-weight: bold;
}
.rendered_html u {
  text-decoration: underline;
}
.rendered_html :link {
  text-decoration: underline;
}
.rendered_html :visited {
  text-decoration: underline;
}
.rendered_html h1 {
  font-size: 185.7%;
  margin: 1.08em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h2 {
  font-size: 157.1%;
  margin: 1.27em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h3 {
  font-size: 128.6%;
  margin: 1.55em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h4 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h5 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h6 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h1:first-child {
  margin-top: 0.538em;
}
.rendered_html h2:first-child {
  margin-top: 0.636em;
}
.rendered_html h3:first-child {
  margin-top: 0.777em;
}
.rendered_html h4:first-child {
  margin-top: 1em;
}
.rendered_html h5:first-child {
  margin-top: 1em;
}
.rendered_html h6:first-child {
  margin-top: 1em;
}
.rendered_html ul {
  list-style: disc;
  margin: 0em 2em;
  padding-left: 0px;
}
.rendered_html ul ul {
  list-style: square;
  margin: 0em 2em;
}
.rendered_html ul ul ul {
  list-style: circle;
  margin: 0em 2em;
}
.rendered_html ol {
  list-style: decimal;
  margin: 0em 2em;
  padding-left: 0px;
}
.rendered_html ol ol {
  list-style: upper-alpha;
  margin: 0em 2em;
}
.rendered_html ol ol ol {
  list-style: lower-alpha;
  margin: 0em 2em;
}
.rendered_html ol ol ol ol {
  list-style: lower-roman;
  margin: 0em 2em;
}
.rendered_html ol ol ol ol ol {
  list-style: decimal;
  margin: 0em 2em;
}
.rendered_html * + ul {
  margin-top: 1em;
}
.rendered_html * + ol {
  margin-top: 1em;
}
.rendered_html hr {
  color: black;
  background-color: black;
}
.rendered_html pre {
  margin: 1em 2em;
}
.rendered_html pre,
.rendered_html code {
  border: 0;
  background-color: #fff;
  color: #000;
  font-size: 100%;
  padding: 0px;
}
.rendered_html blockquote {
  margin: 1em 2em;
}
.rendered_html table {
  margin-left: auto;
  margin-right: auto;
  border: 1px solid black;
  border-collapse: collapse;
}
.rendered_html tr,
.rendered_html th,
.rendered_html td {
  border: 1px solid black;
  border-collapse: collapse;
  margin: 1em 2em;
}
.rendered_html td,
.rendered_html th {
  text-align: left;
  vertical-align: middle;
  padding: 4px;
}
.rendered_html th {
  font-weight: bold;
}
.rendered_html * + table {
  margin-top: 1em;
}
.rendered_html p {
  text-align: left;
}
.rendered_html * + p {
  margin-top: 1em;
}
.rendered_html img {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.rendered_html * + img {
  margin-top: 1em;
}
.rendered_html img,
.rendered_html svg {
  max-width: 100%;
  height: auto;
}
.rendered_html img.unconfined,
.rendered_html svg.unconfined {
  max-width: none;
}
div.text_cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.text_cell > div.prompt {
    display: none;
  }
}
div.text_cell_render {
  /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
  outline: none;
  resize: none;
  width: inherit;
  border-style: none;
  padding: 0.5em 0.5em 0.5em 0.4em;
  color: #000;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
a.anchor-link:link {
  text-decoration: none;
  padding: 0px 20px;
  visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
  visibility: visible;
}
.text_cell.rendered .input_area {
  display: none;
}
.text_cell.rendered .rendered_html {
  overflow-x: auto;
  overflow-y: hidden;
}
.text_cell.unrendered .text_cell_render {
  display: none;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
  font-weight: bold;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
  font-size: 185.7%;
}
.cm-header-2 {
  font-size: 157.1%;
}
.cm-header-3 {
  font-size: 128.6%;
}
.cm-header-4 {
  font-size: 110%;
}
.cm-header-5 {
  font-size: 100%;
  font-style: italic;
}
.cm-header-6 {
  font-size: 100%;
  font-style: italic;
}
/*!
*
* IPython notebook webapp
*
*/
@media (max-width: 767px) {
  .notebook_app {
    padding-left: 0px;
    padding-right: 0px;
  }
}
#ipython-main-app {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook_panel {
  margin: 0px;
  padding: 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook {
  font-size: 14px;
  line-height: 20px;
  overflow-y: hidden;
  overflow-x: auto;
  width: 100%;
  /* This spaces the page away from the edge of the notebook area */
  padding-top: 20px;
  margin: 0px;
  outline: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  min-height: 100%;
}
@media not print {
  #notebook-container {
    padding: 15px;
    background-color: #fff;
    min-height: 0;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
@media print {
  #notebook-container {
    width: 100%;
  }
}
div.ui-widget-content {
  border: 1px solid #ababab;
  outline: none;
}
pre.dialog {
  background-color: #f7f7f7;
  border: 1px solid #ddd;
  border-radius: 2px;
  padding: 0.4em;
  padding-left: 2em;
}
p.dialog {
  padding: 0.2em;
}
/* Word-wrap output correctly.  This is the CSS3 spelling, though Firefox seems
   to not honor it correctly.  Webkit browsers (Chrome, rekonq, Safari) do.
 */
pre,
code,
kbd,
samp {
  white-space: pre-wrap;
}
#fonttest {
  font-family: monospace;
}
p {
  margin-bottom: 0;
}
.end_space {
  min-height: 100px;
  transition: height .2s ease;
}
.notebook_app > #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
@media not print {
  .notebook_app {
    background-color: #EEE;
  }
}
kbd {
  border-style: solid;
  border-width: 1px;
  box-shadow: none;
  margin: 2px;
  padding-left: 2px;
  padding-right: 2px;
  padding-top: 1px;
  padding-bottom: 1px;
}
/* CSS for the cell toolbar */
.celltoolbar {
  border: thin solid #CFCFCF;
  border-bottom: none;
  background: #EEE;
  border-radius: 2px 2px 0px 0px;
  width: 100%;
  height: 29px;
  padding-right: 4px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
  display: -webkit-flex;
}
@media print {
  .celltoolbar {
    display: none;
  }
}
.ctb_hideshow {
  display: none;
  vertical-align: bottom;
}
/* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
   Cell toolbars are only shown when the ctb_global_show class is also set.
*/
.ctb_global_show .ctb_show.ctb_hideshow {
  display: block;
}
.ctb_global_show .ctb_show + .input_area,
.ctb_global_show .ctb_show + div.text_cell_input,
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border-top-right-radius: 0px;
  border-top-left-radius: 0px;
}
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border: 1px solid #cfcfcf;
}
.celltoolbar {
  font-size: 87%;
  padding-top: 3px;
}
.celltoolbar select {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
  width: inherit;
  font-size: inherit;
  height: 22px;
  padding: 0px;
  display: inline-block;
}
.celltoolbar select:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.celltoolbar select::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.celltoolbar select:-ms-input-placeholder {
  color: #999;
}
.celltoolbar select::-webkit-input-placeholder {
  color: #999;
}
.celltoolbar select::-ms-expand {
  border: 0;
  background-color: transparent;
}
.celltoolbar select[disabled],
.celltoolbar select[readonly],
fieldset[disabled] .celltoolbar select {
  background-color: #eeeeee;
  opacity: 1;
}
.celltoolbar select[disabled],
fieldset[disabled] .celltoolbar select {
  cursor: not-allowed;
}
textarea.celltoolbar select {
  height: auto;
}
select.celltoolbar select {
  height: 30px;
  line-height: 30px;
}
textarea.celltoolbar select,
select[multiple].celltoolbar select {
  height: auto;
}
.celltoolbar label {
  margin-left: 5px;
  margin-right: 5px;
}
.completions {
  position: absolute;
  z-index: 110;
  overflow: hidden;
  border: 1px solid #ababab;
  border-radius: 2px;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  line-height: 1;
}
.completions select {
  background: white;
  outline: none;
  border: none;
  padding: 0px;
  margin: 0px;
  overflow: auto;
  font-family: monospace;
  font-size: 110%;
  color: #000;
  width: auto;
}
.completions select option.context {
  color: #286090;
}
#kernel_logo_widget {
  float: right !important;
  float: right;
}
#kernel_logo_widget .current_kernel_logo {
  display: none;
  margin-top: -1px;
  margin-bottom: -1px;
  width: 32px;
  height: 32px;
}
#menubar {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  margin-top: 1px;
}
#menubar .navbar {
  border-top: 1px;
  border-radius: 0px 0px 2px 2px;
  margin-bottom: 0px;
}
#menubar .navbar-toggle {
  float: left;
  padding-top: 7px;
  padding-bottom: 7px;
  border: none;
}
#menubar .navbar-collapse {
  clear: left;
}
.nav-wrapper {
  border-bottom: 1px solid #e7e7e7;
}
i.menu-icon {
  padding-top: 4px;
}
ul#help_menu li a {
  overflow: hidden;
  padding-right: 2.2em;
}
ul#help_menu li a i {
  margin-right: -1.2em;
}
.dropdown-submenu {
  position: relative;
}
.dropdown-submenu > .dropdown-menu {
  top: 0;
  left: 100%;
  margin-top: -6px;
  margin-left: -1px;
}
.dropdown-submenu:hover > .dropdown-menu {
  display: block;
}
.dropdown-submenu > a:after {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  display: block;
  content: "\f0da";
  float: right;
  color: #333333;
  margin-top: 2px;
  margin-right: -10px;
}
.dropdown-submenu > a:after.pull-left {
  margin-right: .3em;
}
.dropdown-submenu > a:after.pull-right {
  margin-left: .3em;
}
.dropdown-submenu:hover > a:after {
  color: #262626;
}
.dropdown-submenu.pull-left {
  float: none;
}
.dropdown-submenu.pull-left > .dropdown-menu {
  left: -100%;
  margin-left: 10px;
}
#notification_area {
  float: right !important;
  float: right;
  z-index: 10;
}
.indicator_area {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
#kernel_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  border-left: 1px solid;
}
#kernel_indicator .kernel_indicator_name {
  padding-left: 5px;
  padding-right: 5px;
}
#modal_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
#readonly-indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  margin-top: 2px;
  margin-bottom: 0px;
  margin-left: 0px;
  margin-right: 0px;
  display: none;
}
.modal_indicator:before {
  width: 1.28571429em;
  text-align: center;
}
.edit_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f040";
}
.edit_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.edit_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.command_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: ' ';
}
.command_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.command_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.kernel_idle_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f10c";
}
.kernel_idle_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_idle_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_busy_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f111";
}
.kernel_busy_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_busy_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_dead_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f1e2";
}
.kernel_dead_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_dead_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_disconnected_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f127";
}
.kernel_disconnected_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_disconnected_icon:before.pull-right {
  margin-left: .3em;
}
.notification_widget {
  color: #777;
  z-index: 10;
  background: rgba(240, 240, 240, 0.5);
  margin-right: 4px;
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget:focus,
.notification_widget.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.notification_widget:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active:hover,
.notification_widget.active:hover,
.open > .dropdown-toggle.notification_widget:hover,
.notification_widget:active:focus,
.notification_widget.active:focus,
.open > .dropdown-toggle.notification_widget:focus,
.notification_widget:active.focus,
.notification_widget.active.focus,
.open > .dropdown-toggle.notification_widget.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
  background-image: none;
}
.notification_widget.disabled:hover,
.notification_widget[disabled]:hover,
fieldset[disabled] .notification_widget:hover,
.notification_widget.disabled:focus,
.notification_widget[disabled]:focus,
fieldset[disabled] .notification_widget:focus,
.notification_widget.disabled.focus,
.notification_widget[disabled].focus,
fieldset[disabled] .notification_widget.focus {
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget .badge {
  color: #fff;
  background-color: #333;
}
.notification_widget.warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning:focus,
.notification_widget.warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.notification_widget.warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active:hover,
.notification_widget.warning.active:hover,
.open > .dropdown-toggle.notification_widget.warning:hover,
.notification_widget.warning:active:focus,
.notification_widget.warning.active:focus,
.open > .dropdown-toggle.notification_widget.warning:focus,
.notification_widget.warning:active.focus,
.notification_widget.warning.active.focus,
.open > .dropdown-toggle.notification_widget.warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
  background-image: none;
}
.notification_widget.warning.disabled:hover,
.notification_widget.warning[disabled]:hover,
fieldset[disabled] .notification_widget.warning:hover,
.notification_widget.warning.disabled:focus,
.notification_widget.warning[disabled]:focus,
fieldset[disabled] .notification_widget.warning:focus,
.notification_widget.warning.disabled.focus,
.notification_widget.warning[disabled].focus,
fieldset[disabled] .notification_widget.warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.notification_widget.success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success:focus,
.notification_widget.success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.notification_widget.success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active:hover,
.notification_widget.success.active:hover,
.open > .dropdown-toggle.notification_widget.success:hover,
.notification_widget.success:active:focus,
.notification_widget.success.active:focus,
.open > .dropdown-toggle.notification_widget.success:focus,
.notification_widget.success:active.focus,
.notification_widget.success.active.focus,
.open > .dropdown-toggle.notification_widget.success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
  background-image: none;
}
.notification_widget.success.disabled:hover,
.notification_widget.success[disabled]:hover,
fieldset[disabled] .notification_widget.success:hover,
.notification_widget.success.disabled:focus,
.notification_widget.success[disabled]:focus,
fieldset[disabled] .notification_widget.success:focus,
.notification_widget.success.disabled.focus,
.notification_widget.success[disabled].focus,
fieldset[disabled] .notification_widget.success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.notification_widget.info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info:focus,
.notification_widget.info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.notification_widget.info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active:hover,
.notification_widget.info.active:hover,
.open > .dropdown-toggle.notification_widget.info:hover,
.notification_widget.info:active:focus,
.notification_widget.info.active:focus,
.open > .dropdown-toggle.notification_widget.info:focus,
.notification_widget.info:active.focus,
.notification_widget.info.active.focus,
.open > .dropdown-toggle.notification_widget.info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
  background-image: none;
}
.notification_widget.info.disabled:hover,
.notification_widget.info[disabled]:hover,
fieldset[disabled] .notification_widget.info:hover,
.notification_widget.info.disabled:focus,
.notification_widget.info[disabled]:focus,
fieldset[disabled] .notification_widget.info:focus,
.notification_widget.info.disabled.focus,
.notification_widget.info[disabled].focus,
fieldset[disabled] .notification_widget.info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.notification_widget.danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger:focus,
.notification_widget.danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.notification_widget.danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active:hover,
.notification_widget.danger.active:hover,
.open > .dropdown-toggle.notification_widget.danger:hover,
.notification_widget.danger:active:focus,
.notification_widget.danger.active:focus,
.open > .dropdown-toggle.notification_widget.danger:focus,
.notification_widget.danger:active.focus,
.notification_widget.danger.active.focus,
.open > .dropdown-toggle.notification_widget.danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
  background-image: none;
}
.notification_widget.danger.disabled:hover,
.notification_widget.danger[disabled]:hover,
fieldset[disabled] .notification_widget.danger:hover,
.notification_widget.danger.disabled:focus,
.notification_widget.danger[disabled]:focus,
fieldset[disabled] .notification_widget.danger:focus,
.notification_widget.danger.disabled.focus,
.notification_widget.danger[disabled].focus,
fieldset[disabled] .notification_widget.danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger .badge {
  color: #d9534f;
  background-color: #fff;
}
div#pager {
  background-color: #fff;
  font-size: 14px;
  line-height: 20px;
  overflow: hidden;
  display: none;
  position: fixed;
  bottom: 0px;
  width: 100%;
  max-height: 50%;
  padding-top: 8px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  /* Display over codemirror */
  z-index: 100;
  /* Hack which prevents jquery ui resizable from changing top. */
  top: auto !important;
}
div#pager pre {
  line-height: 1.21429em;
  color: #000;
  background-color: #f7f7f7;
  padding: 0.4em;
}
div#pager #pager-button-area {
  position: absolute;
  top: 8px;
  right: 20px;
}
div#pager #pager-contents {
  position: relative;
  overflow: auto;
  width: 100%;
  height: 100%;
}
div#pager #pager-contents #pager-container {
  position: relative;
  padding: 15px 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
div#pager .ui-resizable-handle {
  top: 0px;
  height: 8px;
  background: #f7f7f7;
  border-top: 1px solid #cfcfcf;
  border-bottom: 1px solid #cfcfcf;
  /* This injects handle bars (a short, wide = symbol) for 
        the resize handle. */
}
div#pager .ui-resizable-handle::after {
  content: '';
  top: 2px;
  left: 50%;
  height: 3px;
  width: 30px;
  margin-left: -15px;
  position: absolute;
  border-top: 1px solid #cfcfcf;
}
.quickhelp {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  line-height: 1.8em;
}
.shortcut_key {
  display: inline-block;
  width: 21ex;
  text-align: right;
  font-family: monospace;
}
.shortcut_descr {
  display: inline-block;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
span.save_widget {
  margin-top: 6px;
}
span.save_widget span.filename {
  height: 1em;
  line-height: 1em;
  padding: 3px;
  margin-left: 16px;
  border: none;
  font-size: 146.5%;
  border-radius: 2px;
}
span.save_widget span.filename:hover {
  background-color: #e6e6e6;
}
span.checkpoint_status,
span.autosave_status {
  font-size: small;
}
@media (max-width: 767px) {
  span.save_widget {
    font-size: small;
  }
  span.checkpoint_status,
  span.autosave_status {
    display: none;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  span.checkpoint_status {
    display: none;
  }
  span.autosave_status {
    font-size: x-small;
  }
}
.toolbar {
  padding: 0px;
  margin-left: -5px;
  margin-top: 2px;
  margin-bottom: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.toolbar select,
.toolbar label {
  width: auto;
  vertical-align: middle;
  margin-right: 2px;
  margin-bottom: 0px;
  display: inline;
  font-size: 92%;
  margin-left: 0.3em;
  margin-right: 0.3em;
  padding: 0px;
  padding-top: 3px;
}
.toolbar .btn {
  padding: 2px 8px;
}
.toolbar .btn-group {
  margin-top: 0px;
  margin-left: 5px;
}
#maintoolbar {
  margin-bottom: -3px;
  margin-top: -8px;
  border: 0px;
  min-height: 27px;
  margin-left: 0px;
  padding-top: 11px;
  padding-bottom: 3px;
}
#maintoolbar .navbar-text {
  float: none;
  vertical-align: middle;
  text-align: right;
  margin-left: 5px;
  margin-right: 0px;
  margin-top: 0px;
}
.select-xs {
  height: 24px;
}
.pulse,
.dropdown-menu > li > a.pulse,
li.pulse > a.dropdown-toggle,
li.pulse.open > a.dropdown-toggle {
  background-color: #F37626;
  color: white;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
/** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
 * of chance of beeing generated from the ../less/[samename].less file, you can
 * try to get back the less file by reverting somme commit in history
 **/
/*
 * We'll try to get something pretty, so we
 * have some strange css to have the scroll bar on
 * the left with fix button on the top right of the tooltip
 */
@-moz-keyframes fadeOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-webkit-keyframes fadeOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-moz-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@-webkit-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
/*properties of tooltip after "expand"*/
.bigtooltip {
  overflow: auto;
  height: 200px;
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
}
/*properties of tooltip before "expand"*/
.smalltooltip {
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
  text-overflow: ellipsis;
  overflow: hidden;
  height: 80px;
}
.tooltipbuttons {
  position: absolute;
  padding-right: 15px;
  top: 0px;
  right: 0px;
}
.tooltiptext {
  /*avoid the button to overlap on some docstring*/
  padding-right: 30px;
}
.ipython_tooltip {
  max-width: 700px;
  /*fade-in animation when inserted*/
  -webkit-animation: fadeOut 400ms;
  -moz-animation: fadeOut 400ms;
  animation: fadeOut 400ms;
  -webkit-animation: fadeIn 400ms;
  -moz-animation: fadeIn 400ms;
  animation: fadeIn 400ms;
  vertical-align: middle;
  background-color: #f7f7f7;
  overflow: visible;
  border: #ababab 1px solid;
  outline: none;
  padding: 3px;
  margin: 0px;
  padding-left: 7px;
  font-family: monospace;
  min-height: 50px;
  -moz-box-shadow: 0px 6px 10px -1px #adadad;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  border-radius: 2px;
  position: absolute;
  z-index: 1000;
}
.ipython_tooltip a {
  float: right;
}
.ipython_tooltip .tooltiptext pre {
  border: 0;
  border-radius: 0;
  font-size: 100%;
  background-color: #f7f7f7;
}
.pretooltiparrow {
  left: 0px;
  margin: 0px;
  top: -16px;
  width: 40px;
  height: 16px;
  overflow: hidden;
  position: absolute;
}
.pretooltiparrow:before {
  background-color: #f7f7f7;
  border: 1px #ababab solid;
  z-index: 11;
  content: "";
  position: absolute;
  left: 15px;
  top: 10px;
  width: 25px;
  height: 25px;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
}
ul.typeahead-list i {
  margin-left: -10px;
  width: 18px;
}
ul.typeahead-list {
  max-height: 80vh;
  overflow: auto;
}
ul.typeahead-list > li > a {
  /** Firefox bug **/
  /* see https://github.com/jupyter/notebook/issues/559 */
  white-space: normal;
}
.cmd-palette .modal-body {
  padding: 7px;
}
.cmd-palette form {
  background: white;
}
.cmd-palette input {
  outline: none;
}
.no-shortcut {
  display: none;
}
.command-shortcut:before {
  content: "(command)";
  padding-right: 3px;
  color: #777777;
}
.edit-shortcut:before {
  content: "(edit)";
  padding-right: 3px;
  color: #777777;
}
#find-and-replace #replace-preview .match,
#find-and-replace #replace-preview .insert {
  background-color: #BBDEFB;
  border-color: #90CAF9;
  border-style: solid;
  border-width: 1px;
  border-radius: 0px;
}
#find-and-replace #replace-preview .replace .match {
  background-color: #FFCDD2;
  border-color: #EF9A9A;
  border-radius: 0px;
}
#find-and-replace #replace-preview .replace .insert {
  background-color: #C8E6C9;
  border-color: #A5D6A7;
  border-radius: 0px;
}
#find-and-replace #replace-preview {
  max-height: 60vh;
  overflow: auto;
}
#find-and-replace #replace-preview pre {
  padding: 5px 10px;
}
.terminal-app {
  background: #EEE;
}
.terminal-app #header {
  background: #fff;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.terminal-app .terminal {
  width: 100%;
  float: left;
  font-family: monospace;
  color: white;
  background: black;
  padding: 0.4em;
  border-radius: 2px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
}
.terminal-app .terminal,
.terminal-app .terminal dummy-screen {
  line-height: 1em;
  font-size: 14px;
}
.terminal-app .terminal .xterm-rows {
  padding: 10px;
}
.terminal-app .terminal-cursor {
  color: black;
  background: white;
}
.terminal-app #terminado-container {
  margin-top: 20px;
}
/*# sourceMappingURL=style.min.css.map */
    </style>
<style type="text/css">
    .highlight .hll { background-color: #ffffcc }
.highlight  { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
    </style>
<style type="text/css">
    
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }

.ansi-bold { font-weight: bold; }

    </style>


<style type="text/css">
/* Overrides of notebook CSS for static HTML export */
body {
  overflow: visible;
  padding: 8px;
}

div#notebook {
  overflow: visible;
  border-top: none;
}@media print {
  div.cell {
    display: block;
    page-break-inside: avoid;
  } 
  div.output_wrapper { 
    display: block;
    page-break-inside: avoid; 
  }
  div.output { 
    display: block;
    page-break-inside: avoid; 
  }
}
</style>

<!-- Custom stylesheet, it must be in the same directory as the html file -->
<link rel="stylesheet" href="custom.css">

<!-- Loading mathjax macro -->
<!-- Load mathjax -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML"></script>
    <!-- MathJax configuration -->
    <script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ['$','$'], ["\\(","\\)"] ],
            displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
            processEscapes: true,
            processEnvironments: true
        },
        // Center justify equations in code and markdown cells. Elsewhere
        // we use CSS to left justify single line equations in code cells.
        displayAlign: 'center',
        "HTML-CSS": {
            styles: {'.MathJax_Display': {"margin": 0}},
            linebreaks: { automatic: true }
        }
    });
    </script>
    <!-- End of mathjax configuration --></head>
<body>
  <div tabindex="-1" id="notebook" class="border-box-sizing">
    <div class="container" id="notebook-container">

<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Numerical-Methods-using-Python-(scipy)">Numerical Methods using Python (scipy)<a class="anchor-link" href="#Numerical-Methods-using-Python-(scipy)">&#182;</a></h1><h2 id="Overview">Overview<a class="anchor-link" href="#Overview">&#182;</a></h2><p>The core Python language (including the standard libraries) provide enough functionality to carry out computational research tasks. However, there are dedicated (third-party) Python libraries that provide extended functionality which</p>
<ul>
<li><p>provide numerical tools for frequently occurring tasks</p>
</li>
<li><p>which are convenient to use</p>
</li>
<li><p>and are more efficient in terms of CPU time and memory requirements than using the code Python functionality alone.</p>
</li>
</ul>
<p>We list three such modules in particular:</p>
<ul>
<li><p>The <code>numpy</code> module provides a data type specialised for “number crunching” of vectors and matrices (this is the <code>array</code> type provided by “<code>numpy</code>” as introduced in <a href="14-numpy.html">14-numpy.ipynb</a>), and linear algebra tools.</p>
</li>
<li><p>The <code>matplotlib</code> package (also knows as <code>pylab</code>) provides plotting and visualisation capabilities (see <a href="15-visualising-data.html">15-visualising-data.ipynb</a>) and the</p>
</li>
<li><p><code>scipy</code> package (SCIentific PYthon) which provides a multitude of numerical algorithms and which is introduced in this chapter.</p>
</li>
</ul>
<p>Many of the numerical algorithms available through <code>scipy</code> and <code>numpy</code> are provided by established compiled libraries which are often written in Fortran or C. They will thus execute much faster than pure Python code (which is interpreted). As a rule of thumb, we expect compiled code to be two orders of magnitude faster than pure Python code.</p>
<p>You can use the help function for each numerical method to find out more about the source of the implementation.</p>
<h2 id="SciPy">SciPy<a class="anchor-link" href="#SciPy">&#182;</a></h2><p><code>Scipy</code> is built on <code>numpy</code>. All functionality from <code>numpy</code> seems to be available in <code>scipy</code> as well. For example, instead of</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[1]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>we can therefor also use</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[2]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">scipy</span> <span class="k">as</span> <span class="nn">s</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>First we need to import <code>scipy</code>:</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[3]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">scipy</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>The <code>scipy</code> package provides information about its own structure when we use the help command:</p>
<div class="highlight"><pre><span></span><span class="n">help</span><span class="p">(</span><span class="n">scipy</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>The output is very long, so we're showing just a part of it here:</p>

<pre><code>stats       --- Statistical Functions [*]
sparse      --- Sparse matrix [*]
lib         --- Python wrappers to external libraries [*]
linalg      --- Linear algebra routines [*]
signal      --- Signal Processing Tools [*]
misc        --- Various utilities that don't have another home.
interpolate --- Interpolation Tools [*]
optimize    --- Optimization Tools [*]
cluster     --- Vector Quantization / Kmeans [*]
fftpack     --- Discrete Fourier Transform algorithms [*]
io          --- Data input and output [*]
integrate   --- Integration routines [*]
lib.lapack  --- Wrappers to LAPACK library [*]
special     --- Special Functions [*]
lib.blas    --- Wrappers to BLAS library [*]
  [*] - using a package requires explicit import (see pkgload)</code></pre>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>If we are looking for an algorithm to integrate a function, we might explore the <code>integrate</code> package:</p>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">scipy.integrate</span>

<span class="n">scipy</span><span class="o">.</span><span class="n">integrate</span><span class="err">?</span>
</pre></div>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>produces:</p>
<div class="highlight"><pre><span></span>=============================================
Integration and ODEs (:mod:`scipy.integrate`)
=============================================

.. currentmodule:: scipy.integrate

Integrating functions, given function object
============================================

.. autosummary::
   :toctree: generated/

   quad          -- General purpose integration
   dblquad       -- General purpose double integration
   tplquad       -- General purpose triple integration
   nquad         -- General purpose n-dimensional integration
   fixed_quad    -- Integrate func(x) using Gaussian quadrature of order n
   quadrature    -- Integrate with given tolerance using Gaussian quadrature
   romberg       -- Integrate func using Romberg integration
   quad_explain  -- Print information for use of quad
   newton_cotes  -- Weights and error coefficient for Newton-Cotes integration
   IntegrationWarning -- Warning on issues during integration

Integrating functions, given fixed samples
==========================================

.. autosummary::
   :toctree: generated/

   trapz         -- Use trapezoidal rule to compute integral.
   cumtrapz      -- Use trapezoidal rule to cumulatively compute integral.
   simps         -- Use Simpson&#39;s rule to compute integral from samples.
   romb          -- Use Romberg Integration to compute integral from
                 -- (2**k + 1) evenly-spaced samples.

.. seealso::

   :mod:`scipy.special` for orthogonal polynomials (special) for Gaussian
   quadrature roots and weights for other weighting factors and regions.

Integrators of ODE systems
==========================

.. autosummary::
   :toctree: generated/

   odeint        -- General integration of ordinary differential equations.
   ode           -- Integrate ODE using VODE and ZVODE routines.
   complex_ode   -- Convert a complex-valued ODE to real-valued and integrate.
</pre></div>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>The following sections show examples which demonstrate how to employ the algorithms provided by <code>scipy</code>.</p>
<h2 id="Numerical-integration">Numerical integration<a class="anchor-link" href="#Numerical-integration">&#182;</a></h2><p>Scientific Python provides a number of integration routines. A general purpose tool to solve integrals <em>I</em> of the kind</p>
$$I=\int_a^b f(x) \mathrm{d} x$$<p>is provided by the <code>quad()</code> function of the <code>scipy.integrate</code> module.</p>
<p>It takes as input arguments the function <em>f</em>(<em>x</em>) to be integrated (the “integrand”), and the lower and upper limits <em>a</em> and <em>b</em>. It returns two values (in a tuple): the first one is the computed results and the second one is an estimation of the numerical error of that result.</p>
<p>Here is an example: which produces this output:</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[4]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># NBVAL_IGNORE_OUTPUT</span>
<span class="kn">from</span> <span class="nn">math</span> <span class="k">import</span> <span class="n">cos</span><span class="p">,</span> <span class="n">exp</span><span class="p">,</span> <span class="n">pi</span>
<span class="kn">from</span> <span class="nn">scipy.integrate</span> <span class="k">import</span> <span class="n">quad</span>

<span class="c1"># function we want to integrate</span>
<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
    <span class="k">return</span> <span class="n">exp</span><span class="p">(</span><span class="n">cos</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span> <span class="o">*</span> <span class="n">x</span> <span class="o">*</span> <span class="n">pi</span><span class="p">))</span> <span class="o">+</span> <span class="mf">3.2</span>

<span class="c1"># call quad to integrate f from -2 to 2</span>
<span class="n">res</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">quad</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>

<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;The numerical result is </span><span class="si">{:f}</span><span class="s2"> (+-</span><span class="si">{:g}</span><span class="s2">)&quot;</span>
    <span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">err</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>The numerical result is 17.864264 (+-1.55113e-11)
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Note that <code>quad()</code> takes optional parameters <code>epsabs</code> and <code>epsrel</code> to increase or decrease the accuracy of its computation. (Use <code>help(quad)</code> to learn more.) The default values are <code>epsabs=1.5e-8</code> and <code>epsrel=1.5e-8</code>. For the next exercise, the default values are sufficient.</p>
<h3 id="Exercise:-integrate-a-function">Exercise: integrate a function<a class="anchor-link" href="#Exercise:-integrate-a-function">&#182;</a></h3><ol>
<li><p>Using scipy’s <code>quad</code> function, write a program that solves the following integral numerically: $I = \int
_0^1\cos(2\pi x) dx$.</p>
</li>
<li><p>Find the analytical integral and compare it with the numerical solution.</p>
</li>
<li><p>Why is it important to have an estimate of the accuracy (or the error) of the numerical integral?</p>
</li>
</ol>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="Exercise:-plot-before-you-integrate">Exercise: plot before you integrate<a class="anchor-link" href="#Exercise:-plot-before-you-integrate">&#182;</a></h3><p>It is good practice to plot the integrand function to check whether it is “well behaved” before you attempt to integrate. Singularities (i.e. $x$ values where the $f(x)$ tends towards minus or plus infinity) or other irregular behaviour (such as $f(x)=\sin(\frac{1}{x}$) close to $x = 0$ are difficult to handle numerically.</p>
<ol>
<li>Write a function with name <code>plotquad</code> which takes the same arguments as the quad command (<em>i.e.</em> $f$, $a$ and $b$) and which </li>
<li>(i) creates a plot of the integrand $f(x)$ and </li>
<li>(ii) computes the integral numerically using the <code>quad</code> function. The return values should be as for the <code>quad</code> function.</li>
</ol>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Solving-ordinary-differential-equations">Solving ordinary differential equations<a class="anchor-link" href="#Solving-ordinary-differential-equations">&#182;</a></h2><p>To solve an ordinary differential equation of the type
$$\frac{\mathrm{d}y}{\mathrm{d}t}(t) = f(y,t)$$</p>
<p>with a given $y(t_0)=y_0$, we can use <code>scipy</code>’s <code>odeint</code> function. Here is a (self explaining) example program (<code>useodeint.py</code>) to find</p>
$$y(t) \quad \mathrm{for}\quad t\in[0,2]$$<p>given this differential equation:
$$\frac{\mathrm{d}y}{\mathrm{d}t}(t) = -2yt \quad \mathrm{with} \quad y(0)=1.$$</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[5]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="o">%</span><span class="k">matplotlib</span> inline
<span class="kn">from</span> <span class="nn">scipy.integrate</span> <span class="k">import</span> <span class="n">odeint</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">N</span>

<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;this is the rhs of the ODE to integrate, i.e. dy/dt=f(y,t)&quot;&quot;&quot;</span>
    <span class="k">return</span> <span class="o">-</span><span class="mi">2</span> <span class="o">*</span> <span class="n">y</span> <span class="o">*</span> <span class="n">t</span>

<span class="n">y0</span> <span class="o">=</span> <span class="mi">1</span>             <span class="c1"># initial value</span>
<span class="n">a</span> <span class="o">=</span> <span class="mi">0</span>              <span class="c1"># integration limits for t</span>
<span class="n">b</span> <span class="o">=</span> <span class="mi">2</span>

<span class="n">t</span> <span class="o">=</span> <span class="n">N</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>  <span class="c1"># values of t for</span>
                          <span class="c1"># which we require</span>
                          <span class="c1"># the solution y(t)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">odeint</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">y0</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span>  <span class="c1"># actual computation of y(t)</span>

<span class="kn">import</span> <span class="nn">pylab</span>          <span class="c1"># plotting of results</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;t&#39;</span><span class="p">);</span> <span class="n">pylab</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">&#39;y(t)&#39;</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[5]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.text.Text at 0x10ef74320&gt;</pre>
</div>

</div>

<div class="output_area">

<div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
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
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>The <code>odeint</code> command takes a number of optional parameters to change the default error tolerance of the integration (and to trigger the production of extra debugging output). Use the help command to explore these:</p>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<div class="highlight"><pre><span></span><span class="n">help</span><span class="p">(</span><span class="n">scipy</span><span class="o">.</span><span class="n">integrate</span><span class="o">.</span><span class="n">odeint</span><span class="p">)</span>
</pre></div>
<p>will show:</p>

<pre><code>Help on function odeint in module scipy.integrate.odepack:

odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0, ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5, printmessg=0)
    Integrate a system of ordinary differential equations.

    Solve a system of ordinary differential equations using lsoda from the
    FORTRAN library odepack.

    Solves the initial value problem for stiff or non-stiff systems
    of first order ode-s::

        dy/dt = func(y, t0, ...)

    where y can be a vector.

    *Note*: The first two arguments of ``func(y, t0, ...)`` are in the
    opposite order of the arguments in the system definition function used
    by the `scipy.integrate.ode` class.

    Parameters
    ----------
    func : callable(y, t0, ...)
        Computes the derivative of y at t0.
    y0 : array
        Initial condition on y (can be a vector).
    t : array
        A sequence of time points for which to solve for y.  The initial
        value point should be the first element of this sequence.
    args : tuple, optional
        Extra arguments to pass to function.
    Dfun : callable(y, t0, ...)
        Gradient (Jacobian) of `func`.
    col_deriv : bool, optional
        True if `Dfun` defines derivatives down columns (faster),
        otherwise `Dfun` should define derivatives across rows.
    full_output : bool, optional
        True if to return a dictionary of optional outputs as the second output
    printmessg : bool, optional
        Whether to print the convergence message

    Returns
    -------
    y : array, shape (len(t), len(y0))
        Array containing the value of y for each desired time in t,
        with the initial value `y0` in the first row.
    infodict : dict, only returned if full_output == True
        Dictionary containing additional output information

        =======  ============================================================
        key      meaning
        =======  ============================================================
        'hu'     vector of step sizes successfully used for each time step.
        'tcur'   vector with the value of t reached for each time step.
                 (will always be at least as large as the input times).
        'tolsf'  vector of tolerance scale factors, greater than 1.0,
                 computed when a request for too much accuracy was detected.
        'tsw'    value of t at the time of the last method switch
                 (given for each time step)
        'nst'    cumulative number of time steps
        'nfe'    cumulative number of function evaluations for each time step
        'nje'    cumulative number of jacobian evaluations for each time step
        'nqu'    a vector of method orders for each successful step.
        'imxer'  index of the component of largest magnitude in the
                 weighted local error vector (e / ewt) on an error return, -1
                 otherwise.
        'lenrw'  the length of the double work array required.
        'leniw'  the length of integer work array required.
        'mused'  a vector of method indicators for each successful time step:
                 1: adams (nonstiff), 2: bdf (stiff)
        =======  ============================================================

    Other Parameters
    ----------------
    ml, mu : int, optional
        If either of these are not None or non-negative, then the
        Jacobian is assumed to be banded.  These give the number of
        lower and upper non-zero diagonals in this banded matrix.
        For the banded case, `Dfun` should return a matrix whose
        rows contain the non-zero bands (starting with the lowest diagonal).
        Thus, the return matrix `jac` from `Dfun` should have shape
        ``(ml + mu + 1, len(y0))`` when ``ml &gt;=0`` or ``mu &gt;=0``.
        The data in `jac` must be stored such that ``jac[i - j + mu, j]``
        holds the derivative of the `i`th equation with respect to the `j`th
        state variable.  If `col_deriv` is True, the transpose of this
        `jac` must be returned.
    rtol, atol : float, optional
        The input parameters `rtol` and `atol` determine the error
        control performed by the solver.  The solver will control the
        vector, e, of estimated local errors in y, according to an
        inequality of the form ``max-norm of (e / ewt) &lt;= 1``,
        where ewt is a vector of positive error weights computed as
        ``ewt = rtol * abs(y) + atol``.
        rtol and atol can be either vectors the same length as y or scalars.
        Defaults to 1.49012e-8.
    tcrit : ndarray, optional
        Vector of critical points (e.g. singularities) where integration
        care should be taken.
    h0 : float, (0: solver-determined), optional
        The step size to be attempted on the first step.
    hmax : float, (0: solver-determined), optional
        The maximum absolute step size allowed.
    hmin : float, (0: solver-determined), optional
        The minimum absolute step size allowed.
    ixpr : bool, optional
        Whether to generate extra printing at method switches.
    mxstep : int, (0: solver-determined), optional
        Maximum number of (internally defined) steps allowed for each
        integration point in t.
    mxhnil : int, (0: solver-determined), optional
        Maximum number of messages printed.
    mxordn : int, (0: solver-determined), optional
        Maximum order to be allowed for the non-stiff (Adams) method.
    mxords : int, (0: solver-determined), optional
        Maximum order to be allowed for the stiff (BDF) method.

    See Also
    --------
    ode : a more object-oriented integrator based on VODE.
    quad : for finding the area under a curve.

    Examples
    --------
    The second order differential equation for the angle `theta` of a
    pendulum acted on by gravity with friction can be written::

        theta''(t) + b*theta'(t) + c*sin(theta(t)) = 0

    where `b` and `c` are positive constants, and a prime (') denotes a
    derivative.  To solve this equation with `odeint`, we must first convert
    it to a system of first order equations.  By defining the angular
    velocity ``omega(t) = theta'(t)``, we obtain the system::

        theta'(t) = omega(t)
        omega'(t) = -b*omega(t) - c*sin(theta(t))

    Let `y` be the vector [`theta`, `omega`].  We implement this system
    in python as:

    &gt;&gt;&gt; def pend(y, t, b, c):
    ...     theta, omega = y
    ...     dydt = [omega, -b*omega - c*np.sin(theta)]
    ...     return dydt
    ...

    We assume the constants are `b` = 0.25 and `c` = 5.0:

    &gt;&gt;&gt; b = 0.25
    &gt;&gt;&gt; c = 5.0

    For initial conditions, we assume the pendulum is nearly vertical
    with `theta(0)` = `pi` - 0.1, and it initially at rest, so
    `omega(0)` = 0.  Then the vector of initial conditions is

    &gt;&gt;&gt; y0 = [np.pi - 0.1, 0.0]

    We generate a solution 101 evenly spaced samples in the interval
    0 &lt;= `t` &lt;= 10.  So our array of times is:

    &gt;&gt;&gt; t = np.linspace(0, 10, 101)

    Call `odeint` to generate the solution.  To pass the parameters
    `b` and `c` to `pend`, we give them to `odeint` using the `args`
    argument.

    &gt;&gt;&gt; from scipy.integrate import odeint
    &gt;&gt;&gt; sol = odeint(pend, y0, t, args=(b, c))

    The solution is an array with shape (101, 2).  The first column
    is `theta(t)`, and the second is `omega(t)`.  The following code
    plots both components.

    &gt;&gt;&gt; import matplotlib.pyplot as plt
    &gt;&gt;&gt; plt.plot(t, sol[:, 0], 'b', label='theta(t)')
    &gt;&gt;&gt; plt.plot(t, sol[:, 1], 'g', label='omega(t)')
    &gt;&gt;&gt; plt.legend(loc='best')
    &gt;&gt;&gt; plt.xlabel('t')
    &gt;&gt;&gt; plt.grid()
    &gt;&gt;&gt; plt.show()</code></pre>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="Exercise:-using-odeint">Exercise: using <code>odeint</code><a class="anchor-link" href="#Exercise:-using-odeint">&#182;</a></h3><ol>
<li><p>Open a new file with name <code>testodeint.py</code> file in a text editor.</p>
</li>
<li><p>Write a program that computes the solution <em>y</em>(<em>t</em>) of this ODE using the <code>odeint</code> algorithm:
$$\frac{\mathrm{d}y}{\mathrm{d}t} =  -\exp(-t)(10\sin(10t)+\cos(10t))$$
 from $t=0$ to $t = 10$. The initial value is $y(0)=1$.</p>
</li>
<li><p>You should display the solution graphically at points $t=0$, $t=0.01$, $t=0.02$, ..., $t=9.99$, $t=10$.</p>
</li>
</ol>
<p>Hint: a part of the solution $y(t)$ is shown in the figure below.</p>
<p><img src="static/images/odeintsolution8to10.png" alt="image" style="width:100.0%" /></p>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Root-finding">Root finding<a class="anchor-link" href="#Root-finding">&#182;</a></h2><p>If you try to find a $x$ such that
$$f(x)=0$$
then this is called <em>root finding</em>. Note that problems like $g(x)=h(x)$ fall in this category as you can rewrite them as $f(x)=g(x)−h(x)=0$.</p>
<p>A number of root finding tools are available in <code>scipy</code>’s <code>optimize</code> module.</p>
<h3 id="Root-finding-using-the-bisection-method">Root finding using the bisection method<a class="anchor-link" href="#Root-finding-using-the-bisection-method">&#182;</a></h3><p>First we introduce the <code>bisect</code> algorithm which is (i) robust and (ii) slow but conceptually very simple.</p>
<p>Suppose we need to compute the roots of <em>f</em>(<em>x</em>)=<em>x</em><sup>3</sup> − 2<em>x</em><sup>2</sup>. This function has a (double) root at <em>x</em> = 0 (this is trivial to see) and another root which is located between <em>x</em> = 1.5 (where <em>f</em>(1.5)= − 1.125) and <em>x</em> = 3 (where <em>f</em>(3)=9). It is pretty straightforward to see that this other root is located at <em>x</em> = 2. Here is a program that determines this root numerically:</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[6]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">scipy.optimize</span> <span class="k">import</span> <span class="n">bisect</span>

<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;returns f(x)=x^3-2x^2. Has roots at</span>
<span class="sd">    x=0 (double root) and x=2&quot;&quot;&quot;</span>
    <span class="k">return</span> <span class="n">x</span> <span class="o">**</span> <span class="mi">3</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">x</span> <span class="o">**</span> <span class="mi">2</span>

<span class="c1"># main program starts here</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">bisect</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="mf">1.5</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="n">xtol</span><span class="o">=</span><span class="mf">1e-6</span><span class="p">)</span>

<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;The root x is approximately x=</span><span class="si">%14.12g</span><span class="s2">,</span><span class="se">\n</span><span class="s2">&quot;</span>
      <span class="s2">&quot;the error is less than 1e-6.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">x</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;The exact error is </span><span class="si">%g</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="mi">2</span> <span class="o">-</span> <span class="n">x</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>The root x is approximately x= 2.00000023842,
the error is less than 1e-6.
The exact error is -2.38419e-07.
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>The <code>bisect()</code> method takes three compulsory arguments: (i) the function <em>f</em>(<em>x</em>), (ii) a lower limit <em>a</em> (for which we have chosen 1.5 in our example) and (ii) an upper limit <em>b</em> (for which we have chosen 3). The optional parameter <code>xtol</code> determines the maximum error of the method.</p>
<p>One of the requirements of the bisection method is that the interval [<em>a</em>, <em>b</em>] has to be chosen such that the function is either positive at <em>a</em> and negative at <em>b</em>, or that the function is negative at <em>a</em> and postive at <em>b</em>. In other words: <em>a</em> and <em>b</em> have to enclose a root.</p>
<h3 id="Exercise:-root-finding-using-the-bisect-method">Exercise: root finding using the bisect method<a class="anchor-link" href="#Exercise:-root-finding-using-the-bisect-method">&#182;</a></h3><ol>
<li><p>Write a program with name <code>sqrttwo.py</code> to determine an approximation of $\sqrt{2}$ by finding a root <em>x</em> of the function $f(x)=2 − x^2$ using the bisection algorithm. Choose a tolerance for the approximation of the root of 10<sup>−8</sup>.</p>
</li>
<li><p>Document your choice of the initial bracket $[a, b]$ for the root: which values have you chosen for <em>a</em> and for <em>b</em> and why?</p>
</li>
<li><p>Study the results:</p>
<ul>
<li><p>Which value for the root <em>x</em> does the bisection algorithm return?</p>
</li>
<li><p>Compute the value of $\\sqrt{2}$ using <code>math.sqrt(2)</code> and compare this with the approximation of the root. How big is the absolute error of <em>x</em>? How does this compare with <code>xtol</code>?</p>
</li>
</ul>
</li>
</ol>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[&nbsp;]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span> 
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="Root-finding-using-the-fsolve-funcion">Root finding using the <code>fsolve</code> funcion<a class="anchor-link" href="#Root-finding-using-the-fsolve-funcion">&#182;</a></h3><p>A (often) better (in the sense of “more efficient”) algorithm than the bisection algorithm is implemented in the general purpose <code>fsolve()</code> function for root finding of (multidimensional) functions. This algorithm needs only one starting point close to the suspected location of the root (but is not garanteed to converge).</p>
<p>Here is an example:</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[7]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">scipy.optimize</span> <span class="k">import</span> <span class="n">fsolve</span>

<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
    <span class="k">return</span> <span class="n">x</span> <span class="o">**</span> <span class="mi">3</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">x</span> <span class="o">**</span> <span class="mi">2</span>

<span class="n">x</span> <span class="o">=</span> <span class="n">fsolve</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>           <span class="c1"># one root is at x=2.0</span>

<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;The root x is approximately x=</span><span class="si">%21.19g</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">x</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;The exact error is </span><span class="si">%g</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="mi">2</span> <span class="o">-</span> <span class="n">x</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>The root x is approximately x= 2.000000000000006661
The exact error is -6.66134e-15.
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>The return value[6] of <code>fsolve</code> is a numpy array of length <em>n</em> for a root finding problem with <em>n</em> variables. In the example above, we have <em>n</em> = 1.</p>
<h2 id="Interpolation">Interpolation<a class="anchor-link" href="#Interpolation">&#182;</a></h2><p>Given a set of <em>N</em> points $(x_i, y_i)$ with $i = 1, 2, …N$, we sometimes need a function $\hat{f}(x)$ which returns $y_i = f(x_i)$ where $x == x_i$, and which in addition provides some interpolation of the data $(x_i, y_i)$ for all $x$.</p>
<p>The function <code>y0 = scipy.interpolate.interp1d(x,y,kind=’nearest’)</code> does this interpolation based on splines of varying order. Note that the function <code>interp1d</code> returns <em>a function</em> <code>y0</code> which will then interpolate the x-y data for any given $x$ when called as $y0(x)$.</p>
<p>The code below demonstrates this, and shows the different interpolation kinds.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[8]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">scipy.interpolate</span>
<span class="kn">import</span> <span class="nn">pylab</span>

<span class="k">def</span> <span class="nf">create_data</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Given an integer n, returns n data points</span>
<span class="sd">    x and values y as a numpy.array.&quot;&quot;&quot;</span>
    <span class="n">xmax</span> <span class="o">=</span> <span class="mf">5.</span>
    <span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">xmax</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
    <span class="n">y</span> <span class="o">=</span> <span class="o">-</span> <span class="n">x</span><span class="o">**</span><span class="mi">2</span>
    <span class="c1">#make x-data somewhat irregular</span>
    <span class="n">y</span> <span class="o">+=</span> <span class="mf">1.5</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">normal</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
    <span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span>

<span class="c1">#main program</span>
<span class="n">n</span> <span class="o">=</span> <span class="mi">10</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">create_data</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>

<span class="c1">#use finer and regular mesh for plot</span>
<span class="n">xfine</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">4.9</span><span class="p">,</span> <span class="n">n</span> <span class="o">*</span> <span class="mi">100</span><span class="p">)</span>
<span class="c1">#interpolate with piecewise constant function (p=0)</span>
<span class="n">y0</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">interpolate</span><span class="o">.</span><span class="n">interp1d</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s1">&#39;nearest&#39;</span><span class="p">)</span>
<span class="c1">#interpolate with piecewise linear func (p=1)</span>
<span class="n">y1</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">interpolate</span><span class="o">.</span><span class="n">interp1d</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s1">&#39;linear&#39;</span><span class="p">)</span>
<span class="c1">#interpolate with piecewise constant func (p=2)</span>
<span class="n">y2</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">interpolate</span><span class="o">.</span><span class="n">interp1d</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s1">&#39;quadratic&#39;</span><span class="p">)</span>

<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="s1">&#39;o&#39;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;data point&#39;</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">xfine</span><span class="p">,</span> <span class="n">y0</span><span class="p">(</span><span class="n">xfine</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;nearest&#39;</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">xfine</span><span class="p">,</span> <span class="n">y1</span><span class="p">(</span><span class="n">xfine</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;linear&#39;</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">xfine</span><span class="p">,</span> <span class="n">y2</span><span class="p">(</span><span class="n">xfine</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;cubic&#39;</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;x&#39;</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[8]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.text.Text at 0x112793208&gt;</pre>
</div>

</div>

<div class="output_area">

<div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
AAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd8VMUWwPHf7GaTbHoFklBC7yU0pYOIhF4EAREElaJU
QRQUERWlNxHwSRFLRKR3RQUExELovQdIAVKB9LL3/ZEQWkghnZzv57Mfk70z956bxzuZzM49ozRN
QwghxNNPl98BCCGEyBuS8IUQooiQhC+EEEWEJHwhhCgiJOELIUQRIQlfCCGKCEn4QghRREjCF0KI
IkISvhBCFBFm+R3A/VxcXDRPT8/8DkMIIQqVgwcPhmia5ppRuwKV8D09PfH19c3vMIQQolBRSl3J
TDuZ0hFCiCJCEr4QQhQRkvCFEKKIKFBz+EKIp0NCQgL+/v7ExsbmdyhPFUtLS0qWLInBYHii/pLw
hRA5zt/fH1tbWzw9PVFK5Xc4TwVN0wgNDcXf35+yZcs+0TlyfUpHKeWtlDqrlLqglBqf29cTQuS/
2NhYnJ2dJdnnIKUUzs7O2fqrKVdH+EopPbAQaAP4AweUUps0TTuVk9fZcDiAmb+eJTAiBncHI+Pa
Vqarl0dOXkIIkUWS7HNedn+muT2l0xC4oGnaJQCl1E9AFyDHEv6GwwFMWHecmIQkAAIiYpiw7jgA
nctbETLrUwzFnDEUd8a8tBuG4i6P/6FZ2EGJGjkVmhBCFCi5nfA9gGv3fe8PPJOTF5j569nUZH9X
TEISM389S/sORkLXbAPTvQSvt0jC6BKPjVscNh6xGIymB0843BdcKuZkiEKIfDZ58mRsbGx45513
Httmw4YNVKpUiWrVquVaHIGBgYwcOZI1a9ak2+7zzz/n/fffz/Hr5/uHtkqpwcBggNKlS2e5f2BE
zGPfN6/SiCobF5EYfpuEG6HE+QUQc9aP6OPniPQNBV+wqlMZR+9m2JYxof6cAjER2bofIUTWFYRp
2Q0bNtCxY8dcTfju7u4ZJnvIvYSf2x/aBgCl7vu+ZMp7qTRN+1rTtPqaptV3dc2wFMQj3B2Mj3/f
YMTX1hZd/U5YdXodxxGTcP9yOeV376Xspo24jBhOws07BExbyoWJ6wg7Z40pJjrLMQghntzdadmA
iBg07k3LbjgckGHf9Hz22WdUqlSJpk2bcvbs2dT3lyxZQoMGDahduzYvvvgi0dHR7N+/n02bNjFu
3Djq1KnDxYsX02z3sMmTJ9OvXz8aNWpExYoVWbJkCZC8ombcuHHUqFGDmjVrsmrVKgD8/PyoUSN5
2njFihV0794db29vKlasyLvvvgvA+PHjiYmJoU6dOvTt2zdbP4OH5XbCPwBUVEqVVUqZA72BTTl5
gXFtK2M06B94z2jQM65tZc6Hn+e1X1+j68aubLm0hSRT8tSPUgrLSpVwHTaM8r/toNTX/8Pg5sqN
Q/ZcePVdwlevRjOZ0rqcECKHpTct+6QOHjzITz/9xJEjR9i2bRsHDhxIPda9e3cOHDjA0aNHqVq1
KsuWLaNx48Z07tyZmTNncuTIEcqXL59mu7QcO3aMnTt38vfff/PJJ58QGBjIunXrOHLkCEePHuX3
339n3LhxBAUFPdL3yJEjrFq1iuPHj7Nq1SquXbvGtGnTMBqNHDlyBB8fnyf+GaQlV6d0NE1LVEoN
B34F9MByTdNO5uQ17v7Zl9afgybNxJyWc1h8dDET9k7gf0f/x5DaQ2jn2Q69LvmXhNLrsWneHBtP
c6KmdSI4qBzXP5xExOo1lPjwQ4w1n94PcbX4eGKOHSP29BmSbt0CncLg5o6VVx0MZcrIKguRJ9Kb
ln1Se/fupVu3blhZWQHQuXPn1GMnTpxg4sSJREREEBkZSdu2bdM8R2bbdenSBaPRiNFopFWrVvz3
33/s27ePPn36oNfrKV68OC1atODAgQPUqlXrgb6tW7fG3t4egGrVqnHlyhVKlSqV1mVyRK7P4Wua
tg3YlpvX6OrlkeZ8n07paFOmDa1Lt+aPq3/w1dGvUhP/4FqDaVe2HWa6lB+BzgzrYvFYjRrJrdMx
3Jw1G79evXAZOgSXN99EPeGTbQVRwvXrhC5dxu3Nm5MTfRrMK5TH6ZVXsO/eHZ25eR5HKIoSdwcj
AWkk98dN12bXgAED2LBhA7Vr12bFihXs3r07W+0eHhhlZaBkYWGR+rVerycxMTHTfZ9Ekailczfx
r+60mrkt52KuN+f9fe/TdWNXNl/cTKIpEVISv9KScOjalfLbt2HfuTMhixbj93Jf4v388vcmcoCW
mEjI4sVcfKEt4atWYd20KR4LvqDCn39S5dRJKh87SrmtWyj+4UR0lkauT/6YS506EfnXX/kduniK
pTct+6SaN2/Ohg0biImJ4c6dO2zevDn12J07d3BzcyMhIeGBKRNbW1vu3LmTYbuHbdy4kdjYWEJD
Q9m9ezcNGjSgWbNmrFq1iqSkJIKDg9mzZw8NGzbMdPwGg4GEhIQs3nXGikTCv0undDxf5nlWd1rN
vJbzsNRbpib+TUH7SQQwJf+G1dva4j5tKh7z55Nw9SqXe/TkzmN+wxcGCTducqXvKwTP/wKb1s9R
fvt2PGbPwq5NGwzFi6F0OnTm5liUL49T3754rv6ZUkuWoJSOa6+/wc05c9GSkjK+kBBZ1NXLg6nd
a+LhYEQBHg5Gpnavma1VOnXr1qVXr17Url2bdu3a0aBBg9Rjn376Kc888wxNmjShSpUqqe/37t2b
mTNn4uXlxcWLFx/b7mG1atWiVatWPPvss3z44Ye4u7vTrVs3atWqRe3atXnuueeYMWMGJUqUyHT8
gwcPplatWjn+oa3SNC1HT5gd9evX1/JyAxSTZmLXtV18dfQrzoSdoXRCAkMq9qR9s4/uTfUACYGB
XBs+nLjTZ3AdOQLnoUML1fx27LlzXBsyFNOtW5T49BPsO3TIdF9TbCw3PvuciNWrsX3hBdxnzZQp
HpGh06dPU7Vq1fwOI9dlZn1/TkvrZ6uUOqhpWv2M+hapEf7DdEpH69Kt+bnjz8yvPwErk8YHfhvo
sqELGy9sTJ7qAQzu7nj6+GDXsSPB878gaML7aLnw51ZuiD13jiv9+kNiImV8fshSsgfQWVri9ukn
FJ8wnjs7duD/5luY4uJyKVohRG4q0iP8B4T7oc2vza6Wo/nqzmlOh52mlG0pBtcaTMdyHTHTmaFp
GiGLFhGy4EtsWrTAY95cdMbc+WApJ8RfvYpf374opaPMjz6YlyyZrfNFrF1L0AcTsfX2xmPObJSu
SI8XRDqKygg/P8gIPyfoDCjgOdtyrOq4ii9afYGNwYYP//qQzhs6s/78ehK1RFyHDaPE5MlE7t3L
1ddeJykyMr8jf8CGwwE0mbaTamPXsq9Hf+Ji4im9fFm2kz2Aw4svUmzcOO788gs3Z8zMgWiFEHlJ
Ev5dd+fsTYkopWhVuhWrOq5iwXMLsDHYMGn/JDqvT078Ni91x2POHGKOH+fa4CGYoqLyN/YUqU8s
hkfz9qFVFLsTzMf1+rH9Ts79FeL02kAc+/YlbMUKbv/yS46dVwiR+2RK567oMJhRFtrNgGeGPHBI
0zT2+O9h0dFFnAo9hYeNB0NqDaHleXOuj3sPKy8vSn39P3QpD3lkS9BRWDcYEtOfJ09CI0zBTR0E
K7ip07gYn0iIDioc0Wj5F/g30ChX1oSFXlHySdY01+4NLR/dwkCLj+dKv/7EnT+P59o1WDzhZgzi
6SVTOrknO1M6+V48rcBIefL27rLM+ymlaFGqBc1LNmdvwF4WHVnEpP2T8LDx4J0xPfCYvZpDr7zO
O3Vf5UpkUraKP5mu/E1E6DmCKz3PTaURrCVwU4sn2BTPTS2BYC2eYC2eEC2Bh4s/KKOeepeg+f5E
fCvrmNFa4ZRgoGmELR96VMRSZeEPust74MLvaSZ8ZW6Ox7y5XO7WncD3xuP5ow/KTP4pCVHQyf9L
79KlPEmb9PjVN0opmpdsTjOPZuwN2MviI4t522wtbTvbM3DDEQaExjLlmQEP1OS/m/Q1TeN2/G1u
Rt8kODqYmzEp/42+SXBMcPIrOpjgqBsklikJcWceuLaTpRMuRldcrVypZCyGq5Urxe7+16oYrkZX
Xpv2J4M3zsDfxonPKo4gMeACwc5/sqmYP/uSLtC3al96Ve6FvYV9xj8Pn54QefOxhw1ubpSY9CEB
Y8YS+s03uAwalPE5hSiCcqvy5ZOQKZ27EuNhiitU7w5VO2aqi6Zp7L19nomnfqHeyRAG/2LiaFl7
VrYqTZwhDizjKeaquJlwh+CEO8Rrjz64ZKe3pJjBFleDLa7mthQLvYrr7esU67woNam7GF0w6NMv
7WCKjuZIz5fhih8jW4zC37YYAEaDjsEvaJyL28y+gH0YzYz0qNSD/tX6U8I6nQdBVr4MEVfhzX3p
3n/AqNFE7tpF2Y0bsChXLlM/N/H0e1qndBITEzHL4l+zNjY2RObg4g6Z0skJegNYOsDJdcmvTFBA
c+BPYJ+bJb81c6DN3luE2Z7gB29wSTJhHpJEnaQkiiUm4ZqU/Er+OhHXJBOWaf3CLdkAyjyf6dC1
xEQCxozFePk8/m9PRgt1Rj1SV7w9Z8POsuLkCn48/SMrT6+kfbn2DKg+gIqOaWz4ojcDU/rPGiil
KPHRJC7+8w83PvucUkuXFKoH0sTTzc/Pj3bt2tG0aVP279+Ph4cHGzduJDAwkGHDhhEcHIyVlRVL
liyhSpUqbN68mSlTphAfH4+zszM+Pj4UL16cyZMnc/HiRS5dukTp0qX54YcfGD9+PLt37yYuLo5h
w4YxZMgQgoKC6NWrF7dv3yYxMZHFixezdevW1FLH1atXz/Hql1klI/z7RYdBVHCWu7285B9u3IlD
Q6P92T/pcOowu8rXYV/jtvw4uFHW47DzAAubTDXVTCaCJk3i1pq1lJj8EY69e2fYJzAykO9Pfc/a
82uJSYyhecnmDKw+kHrF691L2Gteh8DDMPJQhucL++57bnz+OSUXfolt69aZils83R4YhW4fD9eP
5+wFStSEdtPSbeLn50eFChXw9fWlTp06vPTSS3Tu3JlvvvmGr776iooVK/Lvv/8yYcIEdu7cSXh4
OA4ODiilWLp0KadPn2b27NlMnjyZzZs3s2/fPoxGI19//TU3b95k4sSJxMXF0aRJE1avXs26deuI
jY3lgw8+ICkpiejoaGxtbWWEX2BZOSW/suildjap++p+WfFl4uNs6HZxLzVrVQfXJy8AlREtKYmg
Dydxa906nN8cmqlkD+Bu4857Dd9jSK0hrDq7ih/P/MjAXwdSy7UWr1V/jValW6HTZTzCv8uxT28i
Vv/MjanTsG7aFN19FQCFyE9ly5alTp06ANSrVw8/Pz/2799Pz549U9vEpTw57u/vT69evQgKCiI+
Pp6y960+69y5M8aUhyx37NjBsWPHUneuunXrFufPn6dBgwa89tprJCQk0LVr19TrFiSS8HPAwzX5
tzbtRavSNris9yGkbHFcBuf8B5qmuDiCPpjI7S1bcHnrLVxGDM/yORwsHRhSewivVn+VjRc2suLk
CkbvHo2nnScDEg10MiWRmao5ymCg+Pvvc3Xga4T/4IPz669l/YbE0yuDkXhuerj88I0bN3BwcODI
kSOPtB0xYgRjxoyhc+fO7N69m8mTJ6ces7a2Tv1a0zQWLFiQZn38PXv2sHXrVgYMGMCYMWPo379/
zt5QNsmDVzmkq5cHf41/jsvTOvDXhNY8++VM7Dp0IHjOHII+nIQpPj7HrpUYHMzV/q9ye8sWXN9+
G9eRI7I1d25pZkmvKr3Y3G0zM1vMxGhmZHLMedo66Fh2fBl34u9keA7rRo2wbtKE0CVLCtzTx0Lc
ZWdnR9myZVm9ejWQnLyPHj0KJI/UPTySB2/ffvvtY8/Rtm1bFi9enFq++Ny5c0RFRXHlyhWKFy/O
oEGDeOONNzh0KHk6NLdKHT8JSfi5ROn1uM+YjvPgwUSsXs2VV/oRd/Fits8buWcPl7u/SOy5c3jM
n4/LkME5EG0yM50Z3p7erOq4iiX2DaiUmMS8Q/Nos6YNc3zncCPqRrr9XUePIikigrDvvsuxmITI
aT4+PixbtozatWtTvXp1Nm7cCCRXvuzZsyf16tXDxcXlsf3feOMNqlWrRt26dalRowZDhgwhMTGR
3bt3U7t2bby8vFi1ahWjRo0Ccq/U8ZOQD23zwO0dO7j+4SRM0dE4DxmC88AB6O77EzEzEoKCCJ43
j1sbN2FRsQLuM2dimU6N7mz7ZQIc+p7TQ37jm5Pf8Kvfr+iUjo7lOjKw+kDKOaS9BPPa8OFE//Mv
FX7/Db2DQ+7FJwq0p3VZZkEgxdMKOLsXXqDc1i3YtnmekC+/5MLzbQhZvJiENDY1vp+macSeOUPQ
R5O56N2O29t/wXnIEDzXrs3dZA/JtYVMCVR1rsqM5jPY2m0rPSv15JfLv9BlYxdG7BzBkZuPzoO6
jhiJKTKSsO++z934hBBZJiP8PBZ9+DAhCxcRtW8fKIVltWoY69bFvHRp9I6OYEoiMSSUuEsXif7n
XxL8/VEWFth16ojrm29i8HjyXYCy5I9P4K/5MCn0gbfDY8NZeWYlK8+sJCIuAq9iXgysPpAWpVqg
SyndcG3YcGJ8famwa2fO1BcShY6M8HOPLMssRKy8vCi9dAnx165xe8sWov7+h4jVq9FiYx9op3d0
xFinDs5vvI6dt3feT4/oDMl1hTQN7vtA2NHSkbfqvMWA6gNYf2E93538jpG7RlLOvhwDqg+gY7mO
OL/xOlf++IOINWtwKmCrFIQoyiTh5xPzUqVwefNNXN58E81kIik8nKTwcJTBgN7ePv/nv+8rF00a
ZR2sDFaptXl2+O1g+YnlTNo/iS8Pf0m/av2oXrkaofO/YsAJB4o72TxxMTkhRM6RhF8AKJ0OM2dn
zJyd8zuUe/Qp/zSu/gNmj3+Qygxob3ChXZ1x/B12kuVXf2H2wdnUq6HjvbPx9A3axHF9dVatO4Fj
WHlaVHLNYhwGKFEbZHctIbJNEr5Im2VKRc1vM1dITgGNU14nzc35xs2Way4WNPfbx+gKa3HUTLCX
5FdWvbgMavZ4go5CiPtJwhdpq9MXnMpnurzC/WYs/w8tEv4rf5gX/z3BuJhqxOnaoUPHt681zPyJ
YiJg7esQeyvLMQhxt4ZNYGAgI0eOTC2FUJRJwhdpM7OAci2eqOsFOx0BETH8Xaw6LY0f8/yRcD7y
9sM5tg9UyEJxtciUQnbaw1u9CJF57u7uuZ7sn6Rscn6QiVGR48a1rYzRoCdBb8bGsq2o7adRMf4f
WtQ7l7UT3d2hqwAtHRaFj5+fHzVq1ABgxYoVdO/eHW9vbypWrMi7776b2m7Hjh00atSIunXr0rNn
z9QKl5988gkNGjSgRo0aDB48mLtL2Vu2bMno0aOpX78+8+fPz/sbewIF/1eSKHTuLya33bMRL5/7
g76H7Jhe4n90DqxDI/dMloy+uxxURviF2vT/pnMm7EzGDbOgilMV3mv43hP1PXLkCIcPH8bCwoLK
lSszYsQIjEYjU6ZM4ffff8fa2prp06czZ84cJk2axPDhw5k0aRIA/fr1Y8uWLXTq1AmA+Ph4CtOz
Q5LwRa7o6uWRmvhvTD2PpY8Pddp5MvbPsazssJIydmUyPokkfJELWrdujb198qKEatWqceXKFSIi
Ijh16hRNmjQBkhN5o0bJA5Ndu3YxY8YMoqOjCQsLo3r16qkJv1evXvlzE09IEr7IdU79+xP2gw8T
r3oxsOJuhv8xHJ8OPtiZ26XfMXXTdZnSKcyedCSeWx4umZyYmIimabRp04aVK1c+0DY2Npa33noL
X19fSpUqxeTJk4m97yFJ6yzWxMpvMocvcp3BwwM7b2+SNmxnbt1P8b/jz7t/vkuiKTH9jqlz+DLC
F7nr2Wef5a+//uLChQsAREVFce7cudTk7uLiQmRkZKFf6SMJX+QJ5yGDMUVFUXr7USY+O5G/Av9i
tu/s9DtJwhd5xNXVlRUrVtCnTx9q1apFo0aNOHPmDA4ODgwaNIgaNWrQtm1bGjRokN+hZosUTxN5
xn/020Tt3UuFP35n1rn/8cPpH5jcaDIvVnox7Q4JMfBZCXh+MjR9Oy9DFdkkxdNyj5RHFoWCy1tv
YoqKIvTbbxlbfyyN3Rsz5d8p+F5/3C95+dBWiJyUawlfKTVZKRWglDqS8mqfW9cShYNlpUrYensT
/t33qNuRzGwxk5I2JRmzewz+d/wf7SDr8IXIUbk9wp+raVqdlNe2XL6WKATuH+Xbmdux4LkFJGqJ
jNg5gqiEqAcbS8IXIkfJlI7IU5aVKmHbzpvwb78jMSQET3tPZrWYxeVblxm/ZzxJpqR7jeVDWyFy
VG4n/BFKqWNKqeVKKce0GiilBiulfJVSvsHBwbkcjigIio0ahSk+nuCFCwFo7N6Ydxu8y27/3Sw4
vOBeQ3nwSogcla2Er5T6XSl1Io1XF2AxUA6oAwQBaa7B0zTta03T6muaVt/VNYu10kWhZO7piWOv
XkT8vJq4S5cA6FOlDz0r9WTZiWVsvrg5uaFSgJKEL0QOyVbC1zTteU3TaqTx2qhp2g1N05I0TTMB
S4As1MUVTzuXYW+hs7Tk5uw5ACilmPDMBBqUaMDk/ZM5GnyUlANFJuFrJhMJQUHEHDtG7JkzJN2+
nd8hFRm7d++mY8e0935o3749EREReRxR7si10gpKKTdN04JSvu0GnMita4nCx8zJCedBgwieN4/o
AwewatAAg87AnBZz6LO1D6N2juKnjj9RQul42ksrxJw4SbiPD5G7d5MUHv7AMYuKFbDr0BGHnj0K
1o5oRci2bU/PepPcnMOfoZQ6rpQ6BrQC5MkZ8QCnV/tj5ubG9c8+R0tMLrPgYOnAl62/JDYplpE7
RxKt0z+1I/yE69e5Nnw4fj16cOe337Bu2pQSkz+i5OJFeHwxH9fRo9HbOxA8bx4X27xAyP++Tv05
icz57rvvqFWrFrVr16Zfv34MGDDggfIINjY2qV/fvn2bDh06ULlyZYYOHYrJlPzvztPTk5CQkDTP
V9jk2ghf07TC99MQeUpnNFJ8/HgCRo0i/McfcerfH4DyDuWZ0XwGw/8YzkRne2aZkp665WR3du4k
8N330BITcR09GsdX+qK/L/nc5TJ0CHGXLnFz9hyC584lctcuPObMxuDung9RP5nrn39O3OmcLY9s
UbUKJd5/P902J0+eZMqUKezfvx8XFxfCwsIYM2bMY9v/999/nDp1ijJlyuDt7c26devo0aNHuucr
bJ62/x+JQsb2hTZYN21K8PwvSLh5M/X95iWbM7b+WH6zsuSrO6fzMcKcF/bdd/i/NQxzT0/Kbd6E
y9AhaSb7uyzKlaPUwi9xnzWLuPPn8evVm9izZ/Mw4sJp586d9OzZExcXFwCcnJzSbd+wYUPKlSuH
Xq+nT58+7Nu3L1vnK4ikPLLIV0opSnw4kUudOnNz+gw8Zs9KPda/Wn/O//kZizlLOb9f8Pb0zsdI
s2fD4QBm/nqWakf3MObwKu40bErlrxegs7TM9DnsO3bAolJFrg0azJV+/Snz/XdYVq6ci1HnjIxG
4nnJzMwsdarGZDIRHx+fekzdXQb8mO+fBjLCF/nOvEwZnN94g9tbtxK5Z0/q+0opJkVEU8fgyIf7
PuRk6Mn8CzL2Ftw49USvP/7czfJ1W2lwZgujjvzMWddSTC3pxa5//8nyuSxdLfD80QedlRVX33iD
+GvX8u9nUsA999xzrF69mtDQUADCwsLw9PTk4MGDAGzatImEhITU9v/99x+XL1/GZDKxatUqmjZt
muH5ChsZ4YsCwXnIYG7v+JWgiR9SbvMm9Ck7EpkrHXPt6/FyzElG7hzJTx1+wtUqH57X+KYD3Dj+
RF3LGsxoanKk7QEDocVMtGp2gK5m/8Iukl9ZZBiyh9LLlnLl5b5cGzwEz9Wr0dsUro048kL16tX5
4IMPaNGiBXq9Hi8vL6ZPn06XLl2oXbs23t7eD2xg0qBBA4YPH86FCxdo1aoV3bp1y/B8K1asyOO7
yh4pjywKjJjjJ/Dr3Rv7jh1xnz4t+c1pZaBWL84++zr9tvejgkMFlrddjqVZ5qdCcsTsKuBSCeq/
luku1+NvsThwFwdP+PKxTxK3rM34sB/EG6ypGvAsNvF2LOpbN/MxhJyHXVOg3wYo34qo//7j6sDX
sG3TBo+5cwrUFISUR8492SmPLCN8UWAYa9bAefAgQhd/hW3bF7B97rnkejqaicpOlZnadCqjd49m
8t+Tmdp0at4muKQEcC4P1btm2DQiNoKlx5ey8sxKioUlMWmVnii9Ne81GEFYcASWJX04VGYPVrde
ztT5Ul1N+atAS643ZN2wIcXGvM3NmbMIr18fp1f6PuHNiaJC5vBFgeL65ptYVKlC0AcTSbhxIzXh
A7Qu05oRXiPYemkry04sy9vATImgS398FJ0QzVdHv6LdunZ8f/p7eti3ZO56e2z0Rj5p/hbBVo4k
xZQl+vJIiHMnxvFbZh6YmfFWj3fp9Cmx3Hsuwem117Bu0Zybs2YR7+f3hDcnigpJ+KJAUebmeMye
hSkujoAxY9E03QMPXg2qOYh2nu344tAX7Ly6M+8CMyWBzpDmofikeHxO+9BuXTsWHlnIM27PsLbJ
Ml5adAoVGU2FFcsYPuB5PByMKMDdpjiTG3xJnyp9+O7UdwzaMYiQmJCMY0itHnqvoqhSCrdPPkEZ
DAR+MBHNVHAeUitI08VPi+z+TGVKRxQ4FuXL4/bxxwSOG0dwgo5i1e79I1dK8UmTT7h25xrj947n
+3bfU9kpD5YmmhLvjbBTJJmS2HZ5GwuPLCQgMoAGJRqwoO4Cquk8uPra68TfuEHpZUsxVq9OV6Cr
l8dDJ32fmi41+eTvT+i1pRdzWs6htmvtx8eQOsJPeuBtQ/HiFH//fYImTCDi59U49u6V/fvNJktL
S0JDQ3F2di5Qny0UZpqmERoaimUWlvI+TBK+KJDsO3Uk2teX0FWrsDwciF2ne8cszSyZ/9x8+mzp
w8idI1n18rGSAAAgAElEQVTZcSVOlrn8EMx9UzqaprH72m6+OPwFFyIuUNWpKpOen0Qj90Yk3rzJ
lVf7kxAYSKlFC7Gqm/6Hsp3Kd6KSYyVG7RrFgF8GML7BeF6q/FLaSVKlJPw0Sk3Yd+3CrbVrCZ43
D7t23qmrnPJLyZIl8ff3R0qe5yxLS0tKliz55CfQNK3AvOrVq6cJcVdSXJx2uUUV7XT1alrUoUOP
HD8RfEKr9309rf+2/lp8YnzuBWIyadpHdpr2xxTtQNABre/WvlqNFTW0Dus6aNsvb9eSTEmapmla
3NWr2vnWz2tn6tbTog4cyNIlImIjtKG/DdVqrKihvb/3fS0mIebRRjdOJcdxYl2a54g5dUo7VbWa
FvTZZ1m+RVG4Ab5aJnKszOGLAktnbk7JF3SY2ZnjP2z4Iw8ZVXepzpQmUzh08xCf/vNp7s0ZaybO
mBt4M3gPA38dSFBkEB81+oj1Xdbj7emNTumIPnQYv169Md25Q+kV32BVP8MVcg+wt7BnYeuFDK09
lE0XN9F/e38CIgMebHR3Dv+hKZ27LKtWxaFnT8J9fiTu4sUnuVPxlJOELwo0MysdpQbUREtK4uqA
gSQEBj5w3LusN0NqDWH9hfX8cPqHHL/+1dtXeXfPe/T0cONYfAhj6o1ha/et9KjUA0PKh7i3tmzl
6oAB6GxtKPPTSow1az7RtXRKx7A6w/jyuS/xv+NPry292B+w/16DdKZ07nIdNRKdhQXBC758ohjE
000SvijYlA4LFyOlly4l6dYtrgwYmLxc8z5v1XmL50s/zyzfWewL2PeYE2VNcHQwU/6ZQpcNXdjt
/yeDIm6xvUwvBtYYmPrQlxYfz42pUwl85x2MtWrh+dNPWJQtm+1rtyjVgp86/kQxq2IM/X0oXx/7
GpNmAl36I3xI3mfA8dX+3PnlFymwJh4hCV8UcMk7Xhlr1qD00iUkhYZy5ZV+D6w51ykdnzX9jIoO
FRn35zguRVx64qvdirvFvIPzaL+uPWvPraVHpR5s67CKkeG3sDPceww/3t8fv76vEPbtdzi+8gql
li/DzDHNbZufSGm70vzQ7ge8y3qz4PACRu8azZ3E2OSDGewP4DxgADpbW4IXLEi3nSh6JOGLgu2+
B6+MdepQevkyTJGR+PV5mZgjR1KbWRmsWPDcAsz15gzfOZyI2KxtSReTGMOy48tot64dy08sp3WZ
1mzquokPnv0AF/OUFS86MzSTibAffLjcuQvxfn54fDGfEhM/QGdunmO3fP89TW82nfcavMde/730
2TOG8wbDA+vw06K3t8dpwKtE/v4HMSfzseCcKHAk4YuCTT344JWxdm08V/6IztaWK/36E+bjk/ph
rZuNG/Nbzed61HXe+fMdEkwJjztrqgRTAj+f/ZkO6zow79A8vIp5sbrTaqY1m0Ypu1LJjVKehI29
FsqVvq9wY8oUjF5elNuwHrsXXsj5e76PUopXqr3C0rZLiUyMpq97cX4JP5VhP6dXX0Vna0vo0qW5
Gp8oXCThi4LtoYQPYO7pieeqn7Bu3Jgbn04hYORIEm4kb55Sp1gdPmr0Ef9e/5fp/01/7GlNmont
l7fTdUNXPv3nU0ralmSF9woWtl74yINcCQEBBPztwOUPvyf+8mXcp0+j1NIlGDwefpAq99QrXo+f
n1tM5fgExvlvzbAkg97GBsdeL3Hn1x3E+/vnWZyiYJOELwq2x2xibuboSMnFiyg2bhyRf+7hUocO
hH37Laa4OLpU6MLA6gNZdXYVP5356YF+mqaxL2Afvbb04t0972JhZsHC1gv51vtb6hWv90DbmJMn
CXj3XS682J87/kacOzWm/I5fse/SJV+eHi1mXZzlQTfo41ArUyUZHPv1A72esG+/y8MoRUEmT9qK
gi2NEf69QzqcX38N2+dbc/2TT7kxdRqhS5fhNOBVhnXsy8VbF5n671Tmbovg5s1SFHO9TrEyf+AX
dRwPGw+mNptK+7Lt0al7456EgABu7/iN25s3E3vqFDorKxy7d8A57msMfV8AO7u8uvO0bhgD8H7x
ZtSs0ZuP//443ZIMhuLFse/QgYg1a3Ad9hZ6B4e8j1kUKJLwRcGmdBAVCtf+e2wTcx2U+mgQ0Ueb
EeKzkZszZ3Fz9mzeKO+Ju7MZ5z2+opSlC4FW1wkONtLLtSPvVGqFuhFLzMnvifPzJ+7SNaKOniYh
MHlqyLJSWYq/+TL2LzRFnxgKa796pJZOnrt7fS2JTuU7UdGxIqN3jU63JIPTwIHc2rCB8NWrcRk0
KB+CFgWJbIAiCrbl3nD17yx1ibttxi0/I5GBlsTdMgMt4+kXnbkJK5d4rIvHYe0Wi4VdGith+q6B
im2yFEuOiouEqR7Q5lNoMhJIXkY6fu949gXso0v5Lkx8duIjm8Nc6f8qCYGBlN/xK0ons7hPI9kA
RTwdeiyHmxmvSrmfBVAMGLf8PwwJ8ThG3sQuJg776Hj0JhM6zUSvxuXQ29lg5miLeWk3zBzt0p+X
NzNC6WezdSvZlkZ55LslGRYfXcxXR7/iXPg55raai4fNvQ+UHXv3ImDMWKL+2o9Ns6YPn1UUIZLw
RcFm5578egIX7HQERMSAPcmvFB4ORt4c+1zOxJeXdGmXVrhbkqG6c3Xe3/s+vbb0YkazGTT2aAyA
7fPPo3d2JnzVT5Lwizj5+048tca1rYzR8OC8u9GgZ1zbPKifnxvUozte3a9lqZb81PEnXI2uD5Rk
UObmOLz4IpE7d5Fw/XoeBiwKGkn44qnV1cuDqd1rpu405eFgZGr3mmlsRFJI3Peh7eOUtiuNT3uf
B0syxN/B4aWeoGlE/Lw6j4IVBZFM6YinWlcvj8Kb4B+mFKDSLZ4G90oy1HKpxWzf2fTZ2oe5Ledi
3bQpEevW4TLsLZQ+n1cciXwhI3whChOdPsNaOvBQSYb4SPpu68tvVUuQeP06L70xlybTdrLhcECG
5xFPF0n4QhQm6TyIlpZ6xevxc6efcTH3ZIHDOiIsDbzg9y8BETFMWHdckn4RI1M6QhQmSg/ndkBU
5veKLQYMOpPAJjt79tYKp73vCaYmfYnOzBz9Fj1cdct6HKWegbr9s95P5CtJ+EIUJhVaQ+BhuLgr
S92eSYzhmTDYW8oM/X9m6IMv0bRMPCQCF89kLYaYcLiwUxJ+ISQJX4jCpLfPE3XrOW1n8jMJwJwS
H+F4LpomHp/gbuvBX2Oy+EzCphHJf2WIQkfm8IUoAu5/JuGXkq0oGabhxdonfCZBkVYFU1HwZSvh
K6V6KqVOKqVMSqn6Dx2boJS6oJQ6q5Rqm70whRDZcf8zCXtLNCLGoOf58+fw9Mj8ZwGplIICVINL
ZF52p3ROAN2B/93/plKqGtAbqA64A78rpSppWibWkwkhcsX9zyRcszhA400bmb93Gsu6//hAiegM
PWaPAlHwZWuEr2naaU3TzqZxqAvwk6ZpcZqmXQYuAA2zcy0hRM5xeak3Fgka9vuOs/3y9iz2Vlla
GioKjtyaw/cArt33vX/Ke0KIAsCyVi3MK1Sg/UkL5h2aR2xibOY7y5ROoZVhwldK/a6UOpHGq0tO
BKCUGqyU8lVK+QYHP8F8ohAiy5RSOPbsQamrMRj8gvjuVFa2QZQPbQurDBO+pmnPa5pWI43XxnS6
BQCl7vu+ZMp7aZ3/a03T6muaVt/V1TVr0Qshnphd585gMPDqpZIsPb6U4OhMDriUTkb4hVRuTels
AnorpSyUUmWBisDj96gTQuQ5M0dHbFu3ppZvGFp8PAsOL8hcR5nSKbSyuyyzm1LKH2gEbFVK/Qqg
adpJ4GfgFPALMExW6AhR8Dj06AG37zAqqhEbLmzgdOjpTPSSKZ3CKrurdNZrmlZS0zQLTdOKa5rW
9r5jn2maVl7TtMqapmV1GYAQIg9YN26EmbsbjQ9GY29hz0zfmWS4z7WM8AstedJWiCJM6XQ4dH+R
uH8OMMr9ZQ5cP8DOazsz6oSM8AsnSfhCFHEO3bsB0OxIAuXsyzHHdw4JSQnpd5J1+IWSJHwhijiD
uzvWjRtze/0G3vEaw9U7V1l5ZuXjO8iUTqElCV8IgUPPHiQGBeF1VU8T9yZ8dewrImIjHtNaPrQt
rCThCyGwee459A4ORKxZwzv13yE6IZpFRxel3VjW4RdakvCFEOjMzbHv0oU7O3fiqTnRo1IPfj77
M5ciLj3aWEktncJKEr4QAgCHl3pCQgIRP//MW3XewmhmZJbvrDRaypROYSUJXwgBgEX58lg3bUqY
jw8OOhsG1xrM3oC97A/Y/2BD+dC20JKEL4RI5TRgAEnBIdzeto2+VftS0qYkM31nkmhKvNdI1uEX
WpLwhRCprJs0xqJiBcJWfItBZ2BM/TFciLjAuvPr7mslc/iFlSR8IUQqpRROr75K3JkzRP/7H8+X
fp56xeux8MhC7sTfudsof4MUT0wSvhDiAXadOqF3ciJsxQqUUoxrMI7w2HCWHF+S0iIl4cs8fqEj
CV8I8QCdhQWOffoQuXs3cZcvU925Op3Kd+KHUz9w7c61lDl8JOEXQpLwhRCPcOzTG2VuTtjy5QCM
9BqJmc6MuQfn3pvSkXn8QkcSvhDiEWYuLjj0eJGIDRtJCAqiuHVxBlYfyG9XfuNg7M2UVjLCL2wk
4Qsh0uT8+uugaYQu/waAV6u/SjGrYswI88UEMqVTCEnCF0KkyeDhgX3nzkT8/DOJISFYGawYXXc0
p+JD2WJjjYzwCx9J+EKIx3Ie9AZaQgJh334LQIdyHahu4cJ8R3uiE6LyOTqRVZLwhRCPZVG2LHbe
3oT7/EhSRAQ6peNd54bcNDPj21M/5Hd4Iosk4Qsh0uU8ZAim6GhCV6wAoK7RjRcio/jm9PfciLqR
v8GJLJGEL4RIl2XlSti1b0fYd9+TGBICSsfb4REkakl8cfiL/A5PZIEkfCFEhlxGjECLiyPkf1+D
UpRMTKJfpV5suriJkyEn8zs8kUmS8IUQGbIoWxaH7t2I+OknEkKSa+oMqtYPJ0snZhyYgSZLNAsF
SfhCiExxeestUIrgTb4A2JhZMazOMA7dPMRvV37L5+hEZkjCF0JkisHNDcc+fbj11xnibpkBGt0r
dqeCQwXmHJxDXFJcfocoMiAJXwiRac5DBqOzNHDjsB2ayYSZzoxxDcYREBmAz2mf/A5PZEASvhAi
08ycnHDp+ixR1y2J3Ju89WFj98Y0L9mcJceWEBoTms8RivRIwhdCZInT83Uwt03k5twFaPHxAIyt
P5bYxFgWHVmUz9GJ9EjCF0JkiTKYUdzrFvFXrhHm8yMA5ezL8VLll1hzfg3nw8/nc4TicSThCyGy
Rils3OOwbvwMIQsXJj+MBbxZ+02sDdbM8p0lyzQLKEn4QogsSt4Apfjbb6HFxXHj86kAOFg6MLTW
UPYH7mdvwN78DFA8hiR8IUTWpOx4ZVGmFM5Dh3B72zYi//wTgD5V+lDGrgyzfGeRYErIzyhFGiTh
CyGy5u6etmi4DBqEeYXyBE3+mKTIKAx6A2PqjeHyrcusPrs6X8MUj5KEL4TIont72ipzc9w+/ZTE
69cJnjcPgFalWtGwREMWHV3Erbhb+RineFi2Er5SqqdS6qRSyqSUqn/f+55KqRil1JGU11fZD1UI
USCkbmKe/MGslZcXjn37Ev7DD0T9/TdKKcY1GMftuNt8fezrfAxUPCy7I/wTQHdgTxrHLmqaVifl
NTSb1xFCFBgpCf++LQ6LjR2DeblyBI6fQGJ4OFWcqtCtYjd+PPMjV25fyZ8wxSOylfA1TTutadrZ
nApGCFEI3J3Dv2/ppc5oxH3mDBLDwrj+0WQ0TWOE1wjMdebM8Z2TT4GKh+XmHH7ZlOmcP5VSzR7X
SCk1WCnlq5TyDQ4OzsVwhBA5Qt2bw7+fsXp1XEeO4M6OHUSsWYOL0YU3ar7Bzms7+S/ov3wIVDws
w4SvlPpdKXUijVeXdLoFAaU1TasDjAF+VErZpdVQ07SvNU2rr2lafVdX1ye7CyFEHnp0Sucu59de
w7pxI2588ikxx4/Tr1o/3KzdmOk7kyRTUt6GKR6RYcLXNO15TdNqpPHamE6fOE3TQlO+PghcBCrl
XNhCiHyTxpRO6iG9HvfZszFzdcV/xEjMbkUxuu5ozoSdYdPFTXkcqHhYrkzpKKVclVL6lK/LARWB
S7lxLSFEHrs7pfMYZo6OlPxyAUnh4QSMfhtvj9bUcq3FF4e/ICohKo+CFGnJ7rLMbkopf6ARsFUp
9WvKoebAMaXUEWANMFTTtLDshSqEKBjSnsO/n2W1arh9+gnRBw4Q9OGHvFvvHUJiQlh2fFkexSjS
YpadzpqmrQfWp/H+WmBtds4thCigHlqH/zj2nTuTEBBA8PwvcCtWjHYN2/Hdqe/oWaknbjZueRCo
eJg8aSuEyBr1+A9tH+Y8dCgOfXoTunQZbx4rAcC8Q/NyMTiRHkn4QogsytwIH0ApRYmJE7Fr357Y
L5fw0dnqbLu8jWPBx3I5RpGWbE3pCCGKoMesw39sc70e9xnTUQYzKqzeRP8mRvrHvc+tS0Nxd7Bi
XNvKdPXyyMWAxV0ywhdCZFHmp3RSe5iZ4fb550Q8156Of8UwYvsljFaHCIiIYcK642w4HJA7oYoH
yAhfCJE1d9fhrxsMBqvMdwNsikUQV8vAs8cSmB2+EruG67FUesw36eCgfdZjqewNzcZmvV8RJQlf
CJE1JetD5Q6QEJ3lrhFJMWiVLQh1jMFzfzTxf8QS/awd0U4GMLfO2smuH4fjayThZ4EkfCFE1ti5
Q58fn6jr+Gk7CYiIAUeo2O5XJv75Gw6777CicX+afTo+aydb1Q9CZMP0rJA5fCFEnhnXtjJGgx6A
87q2jO3UjAvuGoP3fsvNufOytvm50mX6g2ORTBK+ECLPdPXyYGr3mng4GFGAudlLrB3Sgj9qK0L/
9z+C3v8ALSGTe+FKws8ymdIRQuSprl4eDyzDjE1syhvG17m18Tjd168nMTSEkvPmobPK4ANhSfhZ
JiN8IUS+sjSz5IvWC/jLuyQ/dLIlat9fXBkwkKSIiPQ7SsLPMkn4Qoh852TpxKLWi/iznjkr+hYj
9swZrgwYSGJ4+OM7ScLPMkn4QogCwdPeky9afcFvpW+xaqAn8Zcvc/XVASSGhqbdQalMlXcQ90jC
F0IUGHWL12VKkymsdbrEL2/VJf7qVa68+iqJaW1/KiP8LJOEL4QoUNqXa8+ouqNYZnkA33FtSQgM
4kpaI32lJOFnkSR8IUSB83qN1+lesTvTE7fiN6kvCYGBXB00iKQ7d+41khF+lknCF0IUOEopJj47
kUZujZhw+3vuTH6TuPMXuDb0TUwxMSmNdGSlgJuQhC+EKKAMOgOzW86mrENZRkZ/g27S28QcOoT/
yFFo8fEywn8CkvCFEAWWrbkti1ovwmhmZLj6EeuJ7xC1dy+B4yegaTKHn1WS8IUQBVoJ6xIsbL2Q
W3G3eMfuFxxGj+D2tm0Ebz8nCT+LJOELIQq8qs5VmdViFmfDz/JZhZPY93qJ0J0XCT8jKSwr5Kcl
hCgUmpdszoSGE/gzYA8rXjDDumpxrv9jTuSePfkdWqEhCV8IUWj0rtKbV6u9ysoLP7PnJVcsHE0E
jH6b2NOn8zu0QkESvhCiUBlTfwxtyrRhRvwZ/Lzj0dnZcW3YsMeXYBCpJOELIQoVndLxedPPqWlw
5N1SNsRMGUVSaBgBo9/OfC39IkoSvhCi0LE0s+QL58a4JiUxImAu5u+PIvrAAW5Mm57foRVokvCF
EIWSs97IopthJJoSGWW+Dut+fQj38SFi7dr8Dq3AkoQvhCiclI6yCQnMbzWfgMgAJte5hLHRs1yf
/DExR4/md3QFkiR8IUThlFJaoX6J+nza5FMOhBxkxUtO6F1d8X/77Yx3zCqCJOELIQqnu8XTNI0O
5TowvM5w1t7cwd9vNSExOITACe+jyQYpD5CEL4QonFRK+kpJ6oNrDaZrha7MjFrPjQFtidy1i7Bv
VuRffAWQJHwhROGUmvCT6+kopZjUaBLPuj3L2y6/kdCsHjfnzCH68OF8DLJgkYQvhCiclEr+730F
1Aw6A3NazsHToSxvN7oAxZwJeHtM+puhFyHZSvhKqZlKqTNKqWNKqfVKKYf7jk1QSl1QSp1VSrXN
fqhCCHGfh0b4d90tqWyyMTKzCySGhhL04Ycyn0/2R/i/ATU0TasFnAMmACilqgG9geqAN7BIKaXP
5rWEEOKexyR8ADcbN75s/SUnXKL5ta0Lkb//QcSaNXkcYMGTrYSvadoOTdMSU779ByiZ8nUX4CdN
0+I0TbsMXAAaZudaQgjxgHQSPkB15+rMaD6DFTVD8K/kyI3PpxLv55d38RVAOTmH/xqwPeVrD+Da
fcf8U94TQoiccTfhp7OvbctSLXm34XimtLlNnEoi4N33inS9nQwTvlLqd6XUiTReXe5r8wGQCPhk
NQCl1GCllK9Syjc4ODir3YUQRVUGI/y7Xq76Mh2e7c/CFxKJPXaMkMVf5UFwBZNZRg00TXs+veNK
qQFAR6C1du9TkQCg1H3NSqa8l9b5vwa+Bqhfv758qiKEyJxMJnyAsfXGMjYykD0XdtDsq8VYN2uK
lZdXLgdY8GR3lY438C7QWdO06PsObQJ6K6UslFJlgYrAf9m5lhBCPCB1WWbG40S9Ts/UZlP5p3dN
QmzB7523MUVF5XKABU925/C/BGyB35RSR5RSXwFomnYS+Bk4BfwCDNM0LSmb1xJCiHuyMMIHMJoZ
mdlhIat6FkMLvMGlzyfnXmwFVIZTOunRNK1COsc+Az7LzvmFEOKx0njwKiMuRhfGvrGcTSe703bt
FgbfLs5v1lVxdzAyrm1luno93WtL5ElbIUThlMUR/l3lHMqh+n3MVRfFq/tXYBN/i4CIGCasO86G
w2l+1PjUyNYIXwgh8s3dhP/7ZDC3zlLXkof8OdLYlfZbbjLp3DRu1ymPQdOTtEUPgSUzPsHDKreD
CumubykQJOELIQqnYtXB1h3O78hy15aJ8bQ0wr56VtQ4AEurnKWaWxxNbsfBSfOsnSz2FgSflYQv
hBC5plQDGHv6ibp2nraTgIgYdG5JzHaeQ+/fgnnnDSPzS5fis5ZjaV+2PXpdJqvBfNcFEmKfKI68
JnP4QogiZ1zbyhgNekw6PTO9BmCWqGfoOjdKWNvz/r73eXHTi/xx5Y/MFVzTmYGpcDy9KwlfCFHk
dPXyYGr3mng4GAmycWVNg+7UCfJnZWJPZrWYRZKWxOjdo3l568v8Hfh3+olfZwamxMcfL0BUQSoZ
Wr9+fc3X1ze/wxBCFDGapnFt0GCifX0pu34d+jKl2HxxM4uPLiYoKoiGJRoysu5IarvWfrTzT30h
3A/e/CvP475LKXVQ07T6GbWTEb4QoshTSuH22WcoCwsC3xuPPkmjW8VubOm2hfENx3Mh4gKvbHuF
ETtHcC783IOdC9EIXxK+EEIAhuLFcJv8EbHHjnFj6jQAzPXm9K3al+3dtzPSayQHrx+kx6YevLfn
Pa7evprcsRAlfFmlI4QQKezatSPm+AnCli/HolJFHHv3BsDKYMWgWoN4qfJLfHPiG3xO+7DDbwfd
KnZjCEkUT5IPbYUQotApNnYM1i2ac33KZ0T9/fcDx+wt7BldbzTbum+jR6UerL+wng5Rh5llaSI8
tuDvmysJXwgh7qP0ejxmz8aibFn8hw0n5vjxR9q4WrnywbMfsLnrZtqaF+N7S2i3rh2LjywmKqHg
VuGUhC+EEA/R29hQaulS9M7OXHtjEHHnz6fZrqRtST6zrcm60FgauTVi0dFFtFvbjm9PfktsYsF7
GEsSvhBCpMFQvBilly9DmZtzZeBrxJ49m3ZDvYHyCfHMbTWXlR1WUtW5KrN8Z9FhfQfWnFtDQgF6
KEsSvhBCPIZ5qVKU/nYFysyMK6/0I/rQoUcb6czAlLzdRw2XGvyvzf9Y3nY5btZufPz3x3Td0JVt
l7ZhymJVz9wgCV8IIdJhUa4cnj/6YObszNXXXufW1q0PNtDpH1mW2aBEA75v9z1fPvcllmaWvLf3
PXpu7smf1/7MXLmGXCIJXwghMmBwd6eMzw9YVqtG4Nh3uDFtOlpiSpJ/zDp8pRQtSrVgdafVTG82
ndjEWIbvHM5n/+bfvlCyDl8IITLBzNmZMiu+4cb0GYStWEH0wYO4fTYFy7sJX9Pu7cJ1H53S0b5c
e9p4tmHjhY2Usy/3wPENhwOY+etZAiNicn3nLamlI4QQWXR7+3auf/IpSZGROLeugrPVDvSfhoA+
a2PoDYcDmLDuODEJ97b8Nhr0TO1eM0tJP7O1dGSEL4QQWWTXrh1WzzzDzenTCd24iXDz4jhdq4tD
dQMGmwxmymu9BM3HATDz17MPJHuAmIQkZv56NldG+ZLwhRDiCZg5OeE+fTpOXVoSPP1TQg6EE3Iw
Aety9thUcsDK0xZzFyM6w4O/ADSbEtyd+AmMiEnz3I97P9sx58pZhRCiiLBs3I5SG9sRf/UqEatX
c+e337mxzS/5oE6H3skJndEISUkk3bqFw0vVKF43+bC7g5GANJK7u4MxV2KVhC+EEDnAvHRpio0d
S7GxY4m/epXYkyeJO3+BxJAQTDExKJ1C7+CAVYN7U+3j2lZOcw5/XNvKuRKjJHwhhMhh5qVLY166
NLRLv93defq8WqUjCV8IIfJRVy+PXEvwD5MHr4QQooiQhC+EEEWEJHwhhCgiJOELIUQRIQlfCCGK
CEn4QghRREjCF0KIIqJAVctUSgUDV7JxChcgJIfCKQyK2v2C3HNRIfecNWU0TXPNqFGBSvjZpZTy
zUyJ0KdFUbtfkHsuKuSec4dM6QghRBEhCV8IIYqIpy3hf53fAeSxona/IPdcVMg954Knag5fCCHE
4z1tI3whhBCP8VQkfKWUt1LqrFLqglJqfH7Hk9uUUsuVUjeVUifyO5a8opQqpZTapZQ6pZQ6qZQa
lV4GugkAAANLSURBVN8x5TallKVS6j+l1NGUe/44v2PKC0opvVLqsFJqS37HkleUUn5KqeNKqSNK
Kd9cu05hn9JRSumBc0AbwB84APTRNO1UvgaWi5RSzYFI4DtN02rkdzx5QSnlBrhpmnZIKWULHAS6
PuX/OyvAWtO0SKWUAdgHjNI07Z98Di1XKaXGAPUBO03TOuZ3PHlBKeUH1Nc0LVefPXgaRvgNgQua
pl3SNC2e/7d3Py83bQEYx79PoauXUrrd5FUMZMqAAUYG8iumBpgoEwZGt+78lpn8Acz86hZKKSJK
tytEKDH3Sr0DCYNbl/sY7DUwcnh791nOXs+nTufsM9nP6XSeVmuvszZcBPZVztQr23eBt7VzjJPt
N7Yfl9cfgBfAeO4aUYk7H8vhwvKY7BHaCJKmgd3A6dpZhmgIhb8SePXV8QwDL4LWSVoNbADu103S
vzK98QSYBW7aHvpnPgX8DvxfO8iYGbgl6ZGkI32dZAiFHw2RtAS4BBy3/b52nr7Z/mx7PTANbJI0
2Ck8SXuAWduPamepYGv5nncCR8u07bwbQuG/BlZ9dTxd3ouBKfPYl4Bzti/XzjNOtt8Bd4AdtbP0
aAuwt8xnXwS2STpbN9J42H5dnmeBK3RT1fNuCIX/EFgraY2kRcB+4GrlTDHPygXMM8AL2ydr5xkH
Sb9KWlZeL6ZbmPCybqr+2P7D9rTt1XS/49u2D1SO1TtJU2UhApKmgO1ALyvwJr7wbX8CjgE36C7k
/WX7ed1U/ZJ0AbgHrJM0I+lw7UxjsAU4SDfqe1Ieu2qH6tkK4I6kZ3QDm5u2m1mq2JDfgL8lPQUe
ANdsX+/jRBO/LDMiIr7PxI/wIyLi+6TwIyIakcKPiGhECj8iohEp/IiIRqTwIyIakcKPiGhECj/i
GyRtlPSs7E0/VfalH+x+NjFs+eNVxAiS/gR+ARYDM7ZPVI4UMScp/IgRyh5ND4F/gc22P1eOFDEn
mdKJGG05sARYSjfSj5hIGeFHjCDpKt12vWvobrN4rHKkiDlZUDtAxM9M0iHgP9vny/2T/5G0zfbt
2tkiflRG+BERjcgcfkREI1L4ERGNSOFHRDQihR8R0YgUfkREI1L4ERGNSOFHRDQihR8R0Ygvf0kL
rZptSz0AAAAASUVORK5CYII=
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Curve-fitting">Curve fitting<a class="anchor-link" href="#Curve-fitting">&#182;</a></h2><p>We have already seen in <a href="14-numpy.html">the numpy chapter</a> that we can fit polynomial functions through a data set using the <code>numpy.polyfit</code> function. Here, we introduce a more generic curve fitting algorithm.</p>
<p>Scipy provides a somewhat generic function (based on the Levenburg-Marquardt algorithm )through <code>scipy.optimize.curve_fit</code> to fit a given (Python) function to a given data set. The assumption is that we have been given a set of data with points $x_1, x_2, …x_N$ and with corresponding function values $y_i$ and a dependence of $y_i$ on $x_i$ such that $y_i=f(x_i,\vec{p})$. We want to determine the parameter vector $\vec{p}=(p_1, p_2, \ldots,
p_k)$ so that $r$, the sum of the residuals, is as small as possible:</p>
$$r = \sum\limits_{i=1}^N \left(y_i - f(x_i, \vec{p})\right)^2$$<p>Curve fitting is of particular use if the data is noisy: for a given $x_i$ and $y_i=f(x_i,\vec{p})$ we have a (unknown) error term $\epsilon_i$ so that $y_i=f(x_i,\vec{p})+\epsilon_i$.</p>
<p>We use the following example to clarify this:
$$f(x,\vec{p}) = a \exp(-b x) + c, \quad\mathrm{i.e.}\quad \vec{p}=\mathtt{a,b,c}$$</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[9]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># NBVAL_IGNORE_OUTPUT</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">from</span> <span class="nn">scipy.optimize</span> <span class="k">import</span> <span class="n">curve_fit</span>


<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;Fit function y=f(x,p) with parameters p=(a,b,c). &quot;&quot;&quot;</span>
    <span class="k">return</span> <span class="n">a</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span> <span class="n">b</span> <span class="o">*</span> <span class="n">x</span><span class="p">)</span> <span class="o">+</span> <span class="n">c</span>

<span class="c1">#create fake data</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">50</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">a</span><span class="o">=</span><span class="mf">2.5</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mf">1.3</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
<span class="c1">#add noise</span>
<span class="n">yi</span> <span class="o">=</span> <span class="n">y</span> <span class="o">+</span> <span class="mf">0.2</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">normal</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>

<span class="c1">#call curve fit function</span>
<span class="n">popt</span><span class="p">,</span> <span class="n">pcov</span> <span class="o">=</span> <span class="n">curve_fit</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">yi</span><span class="p">)</span>
<span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="n">popt</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Optimal parameters are a=</span><span class="si">%g</span><span class="s2">, b=</span><span class="si">%g</span><span class="s2">, and c=</span><span class="si">%g</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">))</span>

<span class="c1">#plotting</span>
<span class="kn">import</span> <span class="nn">pylab</span>
<span class="n">yfitted</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="o">*</span><span class="n">popt</span><span class="p">)</span>   <span class="c1"># equivalent to f(x, popt[0], popt[1], popt[2])</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">yi</span><span class="p">,</span> <span class="s1">&#39;o&#39;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;data $y_i$&#39;</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">yfitted</span><span class="p">,</span> <span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;fit $f(x_i)$&#39;</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;x&#39;</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Optimal parameters are a=2.40487, b=1.2072, and c=0.4703
</pre>
</div>
</div>

<div class="output_area">

<div class="prompt output_prompt">Out[9]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.legend.Legend at 0x1130ecd68&gt;</pre>
</div>

</div>

<div class="output_area">

<div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
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
lQAAAABJRU5ErkJggg==
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Note that in the source code above we define the fitting function $y = f(x)$ through Python code. We can thus fit (nearly) arbitrary functions using the <code>curve_fit</code> method.</p>
<p>The <code>curve_fit</code> function returns a tuple <code>popt, pcov</code>. The first entry <code>popt</code> contains a tuple of the OPTimal Parameters (in the sense that these minimise equation ([eq:1]). The second entry contains the covariance matrix for all parameters. The diagonals provide the variance of the parameter estimations.</p>
<p>For the curve fitting process to work, the Levenburg-Marquardt algorithm needs to start the fitting process with initial guesses for the final parameters. If these are not specified (as in the example above), the value “1.0“ is used for the initial guess.</p>
<p>If the algorithm fails to fit a function to data (even though the function describes the data reasonably), we need to give the algorithm better estimates for the initial parameters. For the example shown above, we could give the estimates to the <code>curve_fit</code> function by changing the line</p>
<div class="highlight"><pre><span></span><span class="n">popt</span><span class="p">,</span> <span class="n">pcov</span> <span class="o">=</span> <span class="n">curve_fit</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">yi</span><span class="p">)</span>
</pre></div>
<p>to</p>
<div class="highlight"><pre><span></span><span class="n">popt</span><span class="p">,</span> <span class="n">pcov</span> <span class="o">=</span> <span class="n">curve_fit</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">yi</span><span class="p">,</span> <span class="n">p0</span><span class="o">=</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mf">0.6</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>if our initial guesses would be <em>a</em> = 2, <em>b</em> = 1 and <em>c</em> = 0.6. Once we take the algorithm “roughly in the right area” in parameter space, the fitting usually works well.</p>
<h2 id="Fourier-transforms">Fourier transforms<a class="anchor-link" href="#Fourier-transforms">&#182;</a></h2><p>In the next example, we create a signal as a superposition of a 50 Hz and 70 Hz sine wave (with a slight phase shift between them). We then Fourier transform the signal and plot the absolute value of the (complex) discrete Fourier transform coefficients against frequency, and expect to see peaks at 50Hz and 70Hz.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[10]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">scipy</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="n">pi</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">pi</span>

<span class="n">signal_length</span> <span class="o">=</span> <span class="mf">0.5</span>   <span class="c1">#[seconds]</span>
<span class="n">sample_rate</span><span class="o">=</span><span class="mi">500</span>       <span class="c1">#sampling rate [Hz]</span>
<span class="n">dt</span> <span class="o">=</span> <span class="mf">1.</span><span class="o">/</span><span class="n">sample_rate</span>   <span class="c1">#time between two samples [s]</span>

<span class="n">df</span> <span class="o">=</span> <span class="mi">1</span><span class="o">/</span><span class="n">signal_length</span>  <span class="c1">#frequency between points in</span>
                      <span class="c1">#in frequency domain [Hz] </span>
<span class="n">t</span><span class="o">=</span><span class="n">scipy</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">signal_length</span><span class="p">,</span><span class="n">dt</span><span class="p">)</span> <span class="c1">#the time vector</span>
<span class="n">n_t</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>            <span class="c1">#length of time vector</span>

<span class="c1">#create signal</span>
<span class="n">y</span><span class="o">=</span><span class="n">scipy</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">pi</span><span class="o">*</span><span class="mi">50</span><span class="o">*</span><span class="n">t</span><span class="p">)</span><span class="o">+</span><span class="n">scipy</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">pi</span><span class="o">*</span><span class="mi">70</span><span class="o">*</span><span class="n">t</span><span class="o">+</span><span class="n">pi</span><span class="o">/</span><span class="mi">4</span><span class="p">)</span>

<span class="c1">#compute fourier transform</span>
<span class="n">f</span><span class="o">=</span><span class="n">scipy</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>

<span class="c1">#work out meaningful frequencies in fourier transform</span>
<span class="n">freqs</span><span class="o">=</span><span class="n">df</span><span class="o">*</span><span class="n">scipy</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,(</span><span class="n">n_t</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">/</span><span class="mf">2.</span><span class="p">,</span><span class="n">dtype</span><span class="o">=</span><span class="s1">&#39;d&#39;</span><span class="p">)</span> <span class="c1">#d=double precision float</span>
<span class="n">n_freq</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">freqs</span><span class="p">)</span>

<span class="c1">#plot input data y against time</span>
<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">t</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">label</span><span class="o">=</span><span class="s1">&#39;input data&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;time [s]&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">&#39;signal&#39;</span><span class="p">)</span>

<span class="c1">#plot frequency spectrum </span>
<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">freqs</span><span class="p">,</span><span class="nb">abs</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">n_freq</span><span class="p">]),</span>
         <span class="n">label</span><span class="o">=</span><span class="s1">&#39;abs(fourier transform)&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;frequency [Hz]&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">&#39;abs(DFT(signal))&#39;</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[10]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.text.Text at 0x1134160f0&gt;</pre>
</div>

</div>

<div class="output_area">

<div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
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
x/0hm/KmAgQAAAAASUVORK5CYII=
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>The lower plot shows the discrete Fourier transform computed from the data shown in the upper plot.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Optimisation">Optimisation<a class="anchor-link" href="#Optimisation">&#182;</a></h2><p>Often we need to find the maximum or minimum of a particular function <em>f</em>(<em>x</em>) where <em>f</em> is a scalar function but <em>x</em> could be a vector. Typical applications are the minimisation of entities such as cost, risk and error, or the maximisation of productivity, efficiency and profit. Optimisation routines typically provide a method to minimise a given function: if we need to maximise <em>f</em>(<em>x</em>) we create a new function <em>g</em>(<em>x</em>) that reverses the sign of <em>f</em>, i.e. <em>g</em>(<em>x</em>)= − <em>f</em>(<em>x</em>) and we minimise <em>g</em>(<em>x</em>).</p>
<p>Below, we provide an example showing (i) the definition of the test function and (ii) the call of the <code>scipy.optimize.fmin</code> function which takes as argument a function <em>f</em> to minimise and an initial value <em>x</em><sub>0</sub> from which to start the search for the minimum, and which returns the value of <em>x</em> for which <em>f</em>(<em>x</em>) is (locally) minimised. Typically, the search for the minimum is a local search, i.e. the algorithm follows the local gradient. We repeat the search for the minimum for two values (<em>x</em><sub>0</sub> = 1.0 and <em>x</em><sub>0</sub> = 2.0, respectively) to demonstrate that depending on the starting value we may find different minimar of the function <em>f</em>.</p>
<p>The majority of the commands (after the two calls to <code>fmin</code>) in the file <code>fmin1.py</code> creates the plot of the function, the start points for the searches and the minima obtained:</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[11]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">scipy</span> <span class="k">import</span> <span class="n">arange</span><span class="p">,</span> <span class="n">cos</span><span class="p">,</span> <span class="n">exp</span>
<span class="kn">from</span> <span class="nn">scipy.optimize</span> <span class="k">import</span> <span class="n">fmin</span>
<span class="kn">import</span> <span class="nn">pylab</span>

<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
    <span class="k">return</span> <span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">-</span> <span class="mi">3</span> <span class="o">*</span> <span class="n">exp</span><span class="p">(</span> <span class="o">-</span><span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mf">0.2</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span><span class="p">)</span>

<span class="c1"># find minima of f(x),</span>
<span class="c1"># starting from 1.0 and 2.0 respectively</span>
<span class="n">minimum1</span> <span class="o">=</span> <span class="n">fmin</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Start search at x=1., minimum is&quot;</span><span class="p">,</span> <span class="n">minimum1</span><span class="p">)</span>
<span class="n">minimum2</span> <span class="o">=</span> <span class="n">fmin</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Start search at x=2., minimum is&quot;</span><span class="p">,</span> <span class="n">minimum2</span><span class="p">)</span>

<span class="c1"># plot function</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">arange</span><span class="p">(</span><span class="o">-</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;$\cos(x)-3e^{-(x-0.2)^2}$&#39;</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">&#39;x&#39;</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">grid</span><span class="p">()</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">axis</span><span class="p">([</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="o">-</span><span class="mf">2.2</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">])</span>

<span class="c1"># add minimum1 to plot</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">minimum1</span><span class="p">,</span> <span class="n">f</span><span class="p">(</span><span class="n">minimum1</span><span class="p">),</span> <span class="s1">&#39;vr&#39;</span><span class="p">,</span>
           <span class="n">label</span><span class="o">=</span><span class="s1">&#39;minimum 1&#39;</span><span class="p">)</span>
<span class="c1"># add start1 to plot</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">),</span> <span class="s1">&#39;or&#39;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">&#39;start 1&#39;</span><span class="p">)</span>

<span class="c1"># add minimum2 to plot</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">minimum2</span><span class="p">,</span><span class="n">f</span><span class="p">(</span><span class="n">minimum2</span><span class="p">),</span><span class="s1">&#39;vg&#39;</span><span class="p">,</span>\
           <span class="n">label</span><span class="o">=</span><span class="s1">&#39;minimum 2&#39;</span><span class="p">)</span>
<span class="c1"># add start2 to plot</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="mf">2.0</span><span class="p">,</span><span class="n">f</span><span class="p">(</span><span class="mf">2.0</span><span class="p">),</span><span class="s1">&#39;og&#39;</span><span class="p">,</span><span class="n">label</span><span class="o">=</span><span class="s1">&#39;start 2&#39;</span><span class="p">)</span>

<span class="n">pylab</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s1">&#39;lower left&#39;</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Optimization terminated successfully.
         Current function value: -2.023866
         Iterations: 16
         Function evaluations: 32
Start search at x=1., minimum is [ 0.23964844]
Optimization terminated successfully.
         Current function value: -1.000529
         Iterations: 16
         Function evaluations: 32
Start search at x=2., minimum is [ 3.13847656]
</pre>
</div>
</div>

<div class="output_area">

<div class="prompt output_prompt">Out[11]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.legend.Legend at 0x1135b3b70&gt;</pre>
</div>

</div>

<div class="output_area">

<div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
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
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Calling the <code>fmin</code> function will produce some diagnostic output, which you can also see above.</p>
<h5 id="Return-value-of-fmin">Return value of <code>fmin</code><a class="anchor-link" href="#Return-value-of-fmin">&#182;</a></h5><p>Note that the return value from the <code>fmin</code> function is a numpy <code>array</code> which – for the example above – contains only one number as we have only one parameter (here <em>x</em>) to vary. In general, <code>fmin</code> can be used to find the minimum in a higher-dimensional parameter space if there are several parameters. In that case, the numpy array would contain those parameters that minimise the objective function. The objective function $f(x)$ has to return a scalar even if there are more parameters, i.e. even if $x$ is a vector as in $f(\mathbf{x})$.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Other-numerical-methods">Other numerical methods<a class="anchor-link" href="#Other-numerical-methods">&#182;</a></h2><p>Scientific Python and Numpy provide access to a large number of other numerical algorithms including function interpolation, Fourier transforms, optimisation, special functions (such as Bessel functions), signal processing and filters, random number generation, and more. Start to explore <code>scipy</code>’s and <code>numpy</code>’s capabilities using the <code>help</code> function and the documentation provided on the web.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="scipy.io:-Scipy-input-output">scipy.io: Scipy-input output<a class="anchor-link" href="#scipy.io:-Scipy-input-output">&#182;</a></h2><p>Scipy provides routines to read and write Matlab <code>mat</code> files. Here is an example where we create a Matlab compatible file storing a (1x11) matrix, and then read this data into a numpy array from Python using the scipy Input-Output library:</p>
<p>First we create a mat file in Octave (Octave is [mostly] compatible with Matlab):</p>
<div class="highlight"><pre><span></span><span class="n">octave</span><span class="p">:</span><span class="mi">1</span><span class="o">&gt;</span> <span class="n">a</span><span class="p">=</span><span class="o">-</span><span class="mi">1</span><span class="p">:</span><span class="mf">0.5</span><span class="p">:</span><span class="mi">4</span>
<span class="n">a</span> <span class="p">=</span>
<span class="n">Columns</span> <span class="mi">1</span> <span class="n">through</span> <span class="mi">6</span><span class="p">:</span>
   <span class="o">-</span><span class="mf">1.0000</span>   <span class="o">-</span><span class="mf">0.5000</span>    <span class="mf">0.0000</span>    <span class="mf">0.5000</span>    <span class="mf">1.0000</span>    <span class="mf">1.5000</span>    
<span class="n">Columns</span> <span class="mi">7</span> <span class="n">through</span> <span class="mi">11</span><span class="p">:</span>
   <span class="mf">2.0000</span>    <span class="mf">2.5000</span>   <span class="mf">3.0000</span>    <span class="mf">3.5000</span>    <span class="mf">4.0000</span>
<span class="n">octave</span><span class="p">:</span><span class="mi">2</span><span class="o">&gt;</span> <span class="n">save</span> <span class="o">-</span><span class="mi">6</span> <span class="n">octave_a</span><span class="p">.</span><span class="n">mat</span> <span class="n">a</span>       <span class="c">%save as version 6</span>
</pre></div>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Then we load this array within python:</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[12]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">scipy.io</span> <span class="k">import</span> <span class="n">loadmat</span>
<span class="n">mat_contents</span> <span class="o">=</span> <span class="n">loadmat</span><span class="p">(</span><span class="s1">&#39;static/data/octave_a.mat&#39;</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[13]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">mat_contents</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[13]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>{&#39;__globals__&#39;: [],
 &#39;__header__&#39;: b&#39;MATLAB 5.0 MAT-file Platform: posix, Created on: Mon Aug  8 12:21:36 2016&#39;,
 &#39;__version__&#39;: &#39;1.0&#39;,
 &#39;a&#39;: array([[-1. , -0.5,  0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ]])}</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[14]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">mat_contents</span><span class="p">[</span><span class="s1">&#39;a&#39;</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[14]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>array([[-1. , -0.5,  0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ]])</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>The function <code>loadmat</code> returns a dictionary: the key for each item in the dictionary is a string which is the name of that array when it was saved in Matlab. The key is the actual array.</p>
<p>A Matlab matrix file can hold several arrays. Each of those is presented by one key-value pair in the dictionary.</p>
<p>Let’s save two arrays from Python to demonstrate that:</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[15]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">scipy.io</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>

<span class="c1"># create two numpy arrays</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">11</span><span class="p">)</span>
<span class="n">b</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">((</span><span class="mi">4</span><span class="p">,</span> <span class="mi">4</span><span class="p">))</span>

<span class="c1"># save as mat-file</span>
<span class="c1"># create dictionary for savemat</span>
<span class="n">tmp_d</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;a&#39;</span><span class="p">:</span> <span class="n">a</span><span class="p">,</span>
         <span class="s1">&#39;b&#39;</span><span class="p">:</span> <span class="n">b</span><span class="p">}</span>
<span class="n">scipy</span><span class="o">.</span><span class="n">io</span><span class="o">.</span><span class="n">savemat</span><span class="p">(</span><span class="s1">&#39;data.mat&#39;</span><span class="p">,</span> <span class="n">tmp_d</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>This program creates the file <code>data.mat</code>, which we can subsequently read using Matlab or here Octave:</p>

<pre><code>HAL47:code fangohr$ octave
GNU Octave, version 3.2.4
Copyright (C) 2009 John W. Eaton and others.
&lt;snip&gt;

octave:1&gt; whos
Variables in the current scope:

  Attr Name        Size                     Bytes  Class
  ==== ====        ====                     =====  ===== 
       ans         1x11                        92  cell

Total is 11 elements using 92 bytes

octave:2&gt; load data.mat
octave:3&gt; whos
Variables in the current scope:

  Attr Name        Size                     Bytes  Class
  ==== ====        ====                     =====  ===== 
       a          11x1                         88  double
       ans         1x11                        92  cell
       b           4x4                        128  double

Total is 38 elements using 308 bytes

octave:4&gt; a
a =

    0
    5
   10
   15
   20
   25
   30
   35
   40
   45
   50

octave:5&gt; b
b =

   1   1   1   1
   1   1   1   1
   1   1   1   1
   1   1   1   1</code></pre>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Note that there are other functions to read from and write to in formats as used by IDL, Netcdf and other formats in <code>scipy.io</code>.</p>
<p>More → see <a href="http://docs.scipy.org/doc/scipy/reference/tutorial/io.html">Scipy tutorial</a>.</p>

</div>
</div>
</div>
    </div>
  </div>
</body>

 


</html>
